【问题标题】:Weird vector filtering in R. Please explainR中的奇怪向量过滤。请解释
【发布时间】:2020-01-20 22:15:03
【问题描述】:

运行以下命令时

x <- c(1:10)
x

y <- c(1:35)
y

res <- y [x <= 5]
res

结果如下:

 [1]  1  2  3  4  5  6  7  8  9 10
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
[26] 26 27 28 29 30 31 32 33 34 35
 [1]  1  2  3  4  5 11 12 13 14 15 21 22 23 24 25 31 32 33 34 35

您能解释一下数字 16:20 和 25:30 是如何被过滤掉的吗? 另请参考我可以了解更多相关信息的资源。

【问题讨论】:

  • 只是将TRUE/FALSE回收到'y'的长度
  • 参见这里:stackoverflow.com/questions/9424976/… 和这里更多关于 R 功能的技术讨论 - stackoverflow.com/questions/9335099/…
  • 我有点理解为什么 R 会使用回收,但程序员会使用回收吗?我觉得 Recycling 退出更多是因为 R 中存在无法修复的漏洞,对使用 R 编写软件的开发人员没有任何好处。我的理解是否正确?

标签: r vector


【解决方案1】:

逻辑向量被回收到“y”的length,因为其中一个的length 大于另一个。如果我们replicate,它将给出与 OP 相同的输出

rep(x <= 5, length.out = length(y))
#[1]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE
#[23]  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE

y[rep(x <= 5, length.out = length(y))]
#[1]  1  2  3  4  5 11 12 13 14 15 21 22 23 24 25 31 32 33 34 35

y[x <= 5]
#[1]  1  2  3  4  5 11 12 13 14 15 21 22 23 24 25 31 32 33 34 35

【讨论】:

    猜你喜欢
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 2019-10-29
    相关资源
    最近更新 更多