【发布时间】:2022-11-21 21:47:45
【问题描述】:
如何使用存储在字符向量中的条件评估 ifelse() 语句?
例如:
a <- 1
b <- 2
condition <- ">"
ifelse(a condition b, print("good"), print("bad))
【问题讨论】:
-
为什么存储为字符串?你应该避免这种情况。
如何使用存储在字符向量中的条件评估 ifelse() 语句?
例如:
a <- 1
b <- 2
condition <- ">"
ifelse(a condition b, print("good"), print("bad))
【问题讨论】:
你可以试试这个:
ifelse(eval(parse(text = paste0(a, condition, b))), 'good', 'bad')
【讨论】:
也可以工作:
ifelse(do.call(condition, list(a, b)), "good", "bad")
因为 > 是 R 中的一个函数。
【讨论】:
这是 match.fun 的另一个选项 -
a <- 1
b <- 2
condition <- ">"
if(match.fun(condition)(a, b)) 'good' else 'bad'
#[1] "bad"
由于这是一个标量比较,我使用 if/else 而不是向量化的 ifelse。如果 a 和 b 是向量,则使用 ifelse。
Some readings about why eval(parse(...)) is bad.
我同意@Roland 的评论,即我们应该避免将condition 保存为字符以完全避免此问题。但是,有时无法做到这一点。我遇到过这种情况,尤其是在使用闪亮的应用程序时,我们希望动态应用这些功能,在这种情况下,我使用 match.fun 选项。
【讨论】: