[英]R: Unexpected behaviour in ifelse
我想了解为什么会发生这种(对我而言)意外行为,因为我不了解背后的逻辑。 这是一个完全可重现的例子。
让我们从两个不同的向量开始:
comp1 <- c(90,2,113,123,99,203,1,137,1,140,44)
action <- c(2,1,1)
现在,我想做一个简单的ifelse
检查,如果它是假的,我想删除第一行,如果我只是这样做,它工作正常:
action <- action[2:length(action)]
> action
[1] 1 1
这是完全正确的,这就是我想要的。 现在,如果我将ifelse
function 与错误的 boolean 一起使用,如下所示:
action <- ifelse(any(49==comp1), 2, action[2:length(action)])
我告诉它如果TRUE
将2
付诸action
,如果FALSE
执行前一个操作action[2:length(action)]
。 现在,如您所见,这种情况下的默认条件是FALSE
,因为上面的comp1
向量中没有 49 ,我希望像以前一样,结果是1 1
向量。 然而,结果出乎意料:
> action
[1] 1
在诸如this之类的其他线程之后,我也尝试使用%in%
来获得相同的结果。
> action <- ifelse(49 %in% comp1, 2, action[2:length(action)])
> action
[1] 1
有人知道为什么会这样吗?
提前致谢!
使用if/else
代替ifelse
,因为ifelse
要求所有 arguments 具有相同的length
。 第一个参数“test”的长度为 1,“yes”为 1,而“no”的长度不同。 根据?ifelse
如果是或否太短,它们的元素将被回收。 当且仅当任何测试元素为真时才会评估 yes ,并且类似地为 no。
if(49 %in% comp1) 2 else action[2:length(action)]
[1] 1 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.