繁体   English   中英

R:ifelse 中的意外行为

[英]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)])

我告诉它如果TRUE2付诸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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM