将存储在向量中的运算符应用为文本

时间:2017-02-21 15:58:37

标签: r

我想将存储在向量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

我可以将存储在矢量中的运算符应用为文本吗?

1 个答案:

答案 0 :(得分:2)

我们可以将lapplyget

一起使用
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