【问题标题】:ifelse not working properly [duplicate]ifelse 无法正常工作 [重复]
【发布时间】:2018-10-21 04:58:21
【问题描述】:

在函数内部,我想将变量设置为相应的参数,或者如果该参数为 NULL,则设置为默认值。代码如下:

  rcontrol <- ifelse(is.null(rcontrol),rpart.control(cp=0.001,minbucket=100,minsplit = 5),rcontrol)

我花了很长时间才弄明白rcontrol 与以这种方式定义的不一样:

rcontrol <- rpart.control(cp=0.001,minbucket=100,minsplit = 5)

谁能解释ifelse的这种奇怪行为?

【问题讨论】:

  • 你想要if(){} else{},而不是ifelse。如果你查看ifelse,它“返回一个与test 形状相同的值”(它的第一个参数),所以如果你传递一个NULL,你什么也得不到。
  • @Gregor,您认为这与那些链接是否足够相似以至于可以重复?
  • @BenBolker 我最近澄清了我在这里选择的欺骗的答案,使其更适用于这类情况,但如果你不同意,我愿意接受其他建议......
  • 这就是我要找的那个。我刚刚添加了r-faq 标签以便于查找。

标签: r


【解决方案1】:

密钥在?ifelse:

‘ifelse’返回一个与‘test’形状相同的值

(强调添加)。由于is.null(rcontrol) 是一个单元素逻辑向量,所以你得到的是一个单元素的东西(在这种情况下是rcontrol 的第一个元素)。

您正在寻找:

if (is.null(rcontrol)) { rcontrol <- rpart.control(cp=0.001,minbucket=100,minsplit = 5)  }

rcontrol <- if (is.null(rcontrol)) [...] else rcontrol

(在这种情况下,第一个成语似乎更合适,因为如果测试为假,您不会对 rcontrol 做任何事情)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-30
    • 2017-07-15
    • 2015-09-06
    • 2016-05-06
    • 2016-05-12
    • 2018-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多