2017-02-21 79 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