将字符转换为表达式

时间:2015-07-15 16:49:35

标签: r

我的testData中有几个数字变量:

testData<-data.frame(a1=1:10, a2=2:11, b1=101:110, b2=102:111)

我将变量的名称拉出如下:

a<-names(select(test, starts_with("a")))
b<-names(select(test, starts_with("b")))

然后我创建了以下组合:

vardata<-expand.grid(a, b)   
vars<-paste(vardata$Var1,vardata$Var2,"=",vardata$Var1,"-",vardata$Var2)   
vars<-gsub("\\s+|\\s+?", "", vars) 

如果你运行vars,你应该得到:

"a1b1=a1-b1" "a2b1=a2-b1" "a1b2=a1-b2" "a2b2=a2-b2"

现在将它传递给DPLYR mutate函数时,我收到一个错误:

testData2<-mutate(testData, parse(text=vars))    

Error: unsupported type for column 'parse(text = vars)' (EXPRSXP, classes = expression)

有人可以帮忙吗? 感谢

1 个答案:

答案 0 :(得分:0)

请记住,调用(标记)中的=与表达式(赋值)中的=不同。您可以通过这种方式建立对mutate的适当调用,虽然它有点丑陋:

> C <- call("mutate", quote(testData))
> for(e in parse(text=vars)) {C[as.character(e[[2]])] <-  e[3]; print(C) }
mutate(testData, a1b1 = a1 - b1)
mutate(testData, a1b1 = a1 - b1, a2b1 = a2 - b1)
mutate(testData, a1b1 = a1 - b1, a2b1 = a2 - b1, a1b2 = a1 -
    b2)
mutate(testData, a1b1 = a1 - b1, a2b1 = a2 - b1, a1b2 = a1 -
    b2, a2b2 = a2 - b2)

然后:

>eval(C)
   a1 a2  b1  b2 a1b1 a2b1 a1b2 a2b2
1   1  2 101 102 -100  -99 -101 -100
2   2  3 102 103 -100  -99 -101 -100
3   3  4 103 104 -100  -99 -101 -100
4   4  5 104 105 -100  -99 -101 -100
5   5  6 105 106 -100  -99 -101 -100
6   6  7 106 107 -100  -99 -101 -100
7   7  8 107 108 -100  -99 -101 -100
8   8  9 108 109 -100  -99 -101 -100
9   9 10 109 110 -100  -99 -101 -100
10 10 11 110 111 -100  -99 -101 -100

也就是说,有更容易的方法来生成列的线性组合。