你不需要在这里使用 eval 。简单地P > 0.5
工作。
P
#[1] 0.3812 0.1939 0.4249 0.1729 0.4161 0.5480 0.9688 0.5409 0.7861 0.1967
P > 0.5
#[1] FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE FALSE
通常,建议您避免使用 eval。如果确实必须,请改用 get、mget、assign。
编辑,对于多个事件,我建议采用如下方法。这是一个快速修复,但我认为可能有更优雅的方式来做到这一点。如果我发现更好的东西,我会更新。
library(data.table)
P <- data.table(P1 = round(runif(1:10), 4))
# first check is for < 0.1, second is for < 0.7, third is for > 0.2
Events = c(0.1,0.7,0.2)
Compare = c('<','<','>')
for ( i in 1:length(Events))
{
P[, paste0("Event",i) := Events[i]]
if (Compare[i] == '>')
{
P[, paste0("VecEv",i):= P1 > get( paste0('Event',i) )]
} else
{
P[, paste0("VecEv",i):= P1 < get( paste0('Event',i) )]
}
}
# P
# P1 Event1 VecEv1 Event2 VecEv2 Event3 VecEv3
# 1: 0.5328 0.1 TRUE 0.7 FALSE 0.2 FALSE
# 2: 0.3306 0.1 TRUE 0.7 FALSE 0.2 FALSE
# 3: 0.3132 0.1 TRUE 0.7 FALSE 0.2 FALSE
# 4: 0.1355 0.1 TRUE 0.7 FALSE 0.2 TRUE
# 5: 0.6571 0.1 TRUE 0.7 FALSE 0.2 FALSE
# 6: 0.7568 0.1 TRUE 0.7 TRUE 0.2 FALSE
# 7: 0.9472 0.1 TRUE 0.7 TRUE 0.2 FALSE
# 8: 0.2839 0.1 TRUE 0.7 FALSE 0.2 FALSE
# 9: 0.7823 0.1 TRUE 0.7 TRUE 0.2 FALSE
# 10: 0.1164 0.1 TRUE 0.7 FALSE 0.2 TRUE