如何ifelse()使用存储在字符向量中的条件评估语句?
例如:
a <- 1
b <- 2
condition <- ">"
ifelse(a condition b, print("good"), print("bad))
Run Code Online (Sandbox Code Playgroud)
你可以试试这个:
ifelse(eval(parse(text = paste0(a, condition, b))), 'good', 'bad')
Run Code Online (Sandbox Code Playgroud)
这是另一个选项match.fun-
a <- 1
b <- 2
condition <- ">"
if(match.fun(condition)(a, b)) 'good' else 'bad'
#[1] "bad"
Run Code Online (Sandbox Code Playgroud)
由于这是标量比较,我使用if/else而不是矢量化ifelse。如果a和b是向量,则使用ifelse.
一些关于为什么的读物eval(parse(...))很糟糕。
我同意@Roland 的评论,我们应该避免保存condition为角色以完全避免这个问题。然而,有时这是不可能的。我经历过这种情况,特别是在使用闪亮的应用程序时,我们想要动态应用此类功能,在这种情况下,我使用match.fun选项。