2012-11-12 35 views
1

我想编写一个函数,该函数根据从SQL表中读取的字符串在数据框中创建新变量。该函数应该带有两个参数:dfstr,并返回df并附加一个额外的列。 str将为"a = f(B)"形式的字符串,其中adfB的列为df的一组列,f为转换函数。传递字符串作为变换的第二个参数

例子:

df <- data.frame(EventID = c(111,112,113), Day = c(6,8,15)) 

我要的是transform(df, Week = ceiling(Day/7)),但我无法弄清楚如何传递字符串"Week = ceiling(Day/7)"(如字符类型的变量)的transform...参数。

我试过parseeval的各种组合,但我无法弄清楚如何将字符对象转换为R文档描述为“标记的向量表达式”的内容。

回答

2

这里有一种方法:

fun <- function(df, str.expression) within(df, eval(parse(text=str.expression))) 

fun(df, "Week = ceiling(Day/7)") 
# EventID Day Week 
# 1  111 6 1 
# 2  112 8 2 
# 3  113 15 3 
0

想通了相当快的,但我还是会共享:eval(parse())整个事情!

eval(parse(text = paste("transform(df,", str, ")", sep = ""))) 

这就是说,我喜欢@ flodel的答案更好。

+1

使用'sprintf('transform(df,%s)',str)'来构造你的调用可能更容易 – mnel

相关问题