为什么ifelse函数只返回作为参数提供的向量的第一个元素?

4

我对以下R代码的结果感到困惑:

ifelse(TRUE, c(2, 3, 4), "a")
#[1] 2

我的结果是2,但我希望它是2, 3, 4,为什么会这样?


8
从帮助文件 ?ifelse 中可以得知:"ifelse返回一个与测试(test)形状相同的值,该值填充了从yes或no中选择的元素,具体取决于测试元素是否为TRUE或FALSE。" 我认为这是说如果您的测试是一个长度为一的向量(如您的 TRUE),则它返回一个长度为一的值。尝试将TRUE替换为c(TRUE,TRUE),以查看此示例。 - Jon Spring
是的,你说得对。谢谢。 - Hugo
@JonSpring,请将其作为答案发布!hugo,除了您完全可理解的基于文本的问题外,我们不需要屏幕截图...(我们相信您) - Ben Bolker
2个回答

5

来自帮助文档中的?ifelse

"ifelse返回一个与测试条件相同结构的值,该值由从yes或no选择的元素填充,具体取决于测试条件是TRUE还是FALSE。"

我认为这是说如果测试条件是长度为一的向量(比如TRUE),则它也会返回长度为一的值。如果测试条件的长度为两个,则它将返回长度为两个的值。(必要时使用指定值的元素进行循环)

> ifelse(TRUE, c(2,3,4), "a")
[1] 2
> ifelse(c(TRUE,TRUE), c(2,3,4), "a")
[1] 2 3
> ifelse(c(FALSE,FALSE), c(2,3,4), "a")
[1] "a" "a"

2

首先,您应该将数据和代码作为文本而不是图像发布。

其次,ifelse 用于向量(其长度>1),对于标量(长度=1)请使用 if/else

if(TRUE) c(2, 3, 4) else 'a'
#[1] 2 3 4

if(FALSE) c(2, 3, 4) else 'a'
#[1] "a"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接