【问题标题】:Evaluate condition stored in character vector评估存储在字符向量中的条件
【发布时间】:2022-11-21 21:47:45
【问题描述】:

如何使用存储在字符向量中的条件评估 ifelse() 语句?

例如:

a <- 1
b <- 2
condition <- ">"

ifelse(a condition b, print("good"), print("bad))

【问题讨论】:

  • 为什么存储为字符串?你应该避免这种情况。

标签: r dplyr


【解决方案1】:

你可以试试这个:

ifelse(eval(parse(text = paste0(a, condition, b))), 'good', 'bad')

【讨论】:

  • 不,永远不要那样做。这是不好的做法,效率低下并且调试起来是一场噩梦。
  • @罗兰。请评论为什么从不这样做。非常感谢。
  • @Roland 是的,我不知道这一点。我刚刚阅读了 Ronak 的评论并意识到我们必须避免它的原因。谢谢你提出来。
【解决方案2】:

也可以工作:

ifelse(do.call(condition, list(a, b)), "good", "bad")

因为 &gt; 是 R 中的一个函数。

【讨论】:

    【解决方案3】:

    这是 match.fun 的另一个选项 -

    a <- 1
    b <- 2
    condition <- ">"
    if(match.fun(condition)(a, b)) 'good' else 'bad'
    #[1] "bad"
    

    由于这是一个标量比较,我使用 if/else 而不是向量化的 ifelse。如果 ab 是向量,则使用 ifelse

    Some readings about why eval(parse(...)) is bad.

    我同意@Roland 的评论,即我们应该避免将condition 保存为字符以完全避免此问题。但是,有时无法做到这一点。我遇到过这种情况,尤其是在使用闪亮的应用程序时,我们希望动态应用这些功能,在这种情况下,我使用 match.fun 选项。

    【讨论】:

    • 非常感谢您分享这一见解!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 2011-03-12
    • 1970-01-01
    • 2017-12-27
    • 1970-01-01
    相关资源
    最近更新 更多