2017-02-21 78 views
1

我想存储在向量运算符适用operatorsUsedseries1和数据帧dfseries2应用运营商

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] TRUE FALSE FALSE TRUE TRUE 

有没有去我能将存储在向量作为文本运营商?

+2

'sapply(表达式(1 ==使用match.fun(op)代替get(op) 1,2 == 3,3 == 2,4 == 4,5 == 5),eval)' – rawr

+0

Thanks @rawr,解决了它。 – koteletje

回答

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,我们还可以在lapply

+1

@akrun,谢谢,我甚至摆脱了我的原始循环:) – koteletje