我想将存储在向量operatorsUsed
中的运算符应用于数据框series1
的{{1}}和series2
:
df
我尝试合并operatorsUsed = c('==', '>=', '<=')
series1 = 1:5
series2 = c(1, 3, 2, 4, 5)
df = data.frame(series1,
series2,
stringsAsFactors = FALSE)
和parse()
函数:
eval()
但这不起作用。通过解析,我获得了例如nbrOperators = length(operatorsUsed)
for (j in 1:nbrOperators){
a = df[eval(parse(text = paste0(df$series1, operatorsUsed[j], df$series2))),]
tableCreated = paste0('b', j)
assign(tableCreated, a)
}
j=1
看起来很有希望,但随后应用expression(1==1, 2==3, 3==2, 4==4, 5==5)
会产生
eval
而不是寻找
[1] TRUE
我可以将存储在矢量中的运算符应用为文本吗?
答案 0 :(得分:2)
我们可以将lapply
与get
lapply(operatorsUsed, function(op) get(op)(df$series1, df$series2))
#[[1]]
#[1] TRUE FALSE FALSE TRUE TRUE
#[[2]]
#[1] TRUE FALSE TRUE TRUE TRUE
#[[3]]
#[1] TRUE TRUE FALSE TRUE TRUE
正如@rawr在评论中提到的那样,我们也可以在match.fun(op)
get(op)
代替lapply