ifelse不能正常工作

时间:2018-05-10 20:31:26

标签: r

在函数内部,我想将变量设置为相应的参数,如果该参数为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

任何人都可以解释{{1}}的这种奇怪的行为吗?

1 个答案:

答案 0 :(得分:3)

密钥位于?ifelse

  

'ifelse'返回与'test'形状相同的值

(重点补充)。由于is.null(rcontrol)是一个1元素的逻辑向量,所以你得到的是一个1元素的东西(在这种情况下是rcontrol的第一个元素)。

您正在寻找:

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

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

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