【发布时间】:2022-02-03 21:55:15
【问题描述】:
如果我输入
ifelse(TRUE, rep(1,10), 0)
我得到1 而不是1 1 1 1 1 1 1 1 1 1。
为什么?这是一个错误吗?如何获得向量?
【问题讨论】:
-
另一个有趣的,在某些情况下是一个方便的解决方案:
x <- T; rep(+x, 9*x+1),您可以在T上使用rep(1, 10)或在F上使用rep(0, 1)
标签: r
如果我输入
ifelse(TRUE, rep(1,10), 0)
我得到1 而不是1 1 1 1 1 1 1 1 1 1。
为什么?这是一个错误吗?如何获得向量?
【问题讨论】:
x <- T; rep(+x, 9*x+1),您可以在T 上使用rep(1, 10) 或在F 上使用rep(0, 1)
标签: r
因为ifelse是矢量化的,所以:
返回一个与 test 形状相同的值
由于您的测试只是一个单元素向量,因此您的返回只是rep(1, 10) 的第一个元素。
你想要的是if,它需要一个布尔值,然后运行以下代码,不管它是什么。如果你想返回你的else 语句,那么我们明确地包含else,如下所示。
if (TRUE) rep(1,10) else 0
#> [1] 1 1 1 1 1 1 1 1 1 1
【讨论】:
您应该知道ifelse 是矢量化的。这意味着,您的输出尺寸与条件一致。在您的代码中,由于条件 TRUE 是单个值,因此您的输出也应该是单个值。这就是为什么你得到1 而不是1 1 1 1 1 1 1 1 1 1。
你可以试试
> ifelse(rep(TRUE,10), 1, 0)
[1] 1 1 1 1 1 1 1 1 1 1
或
> unlist(ifelse(TRUE, list(rep(1, 10)), 0))
[1] 1 1 1 1 1 1 1 1 1 1
【讨论】: