首页 > 解决方案 > 使用布尔值列表在 R 中建立索引的问题

问题描述

我有几年的编程经验,但对 R 比较陌生。尝试使用布尔条目数组从数组中提取条目时遇到了意想不到的结果:

array = c(2, 3, 4, 5);
array[c(FALSE, FALSE, FALSE, TRUE)]
#output: [1] 5
array[c(0, 0, 0, 1)]
#output: [1] 2

这让我感到惊讶,因为我认为 FALSE 和 0 在这种过程中是可以互换的(对于 TRUE 和 1 也是如此)。我检查了以下内容以确保,变得更加困惑:

T==1
#output: [1] TRUE
F==0
#output: [1] TRUE
c(0,0,0,1)==c(F,F,F,T)
#output: [1] TRUE TRUE TRUE TRUE

有人可以帮助解释为什么 R 以不同的方式处理这些索引方法吗?

非常感谢,

标签: rindexingboolean

解决方案


as.logical(c(0,0,0,1))==c(F,F,F,T)

解释

R中,numeric值的处理方式与logical值不同。

在您的场景中,由于2是数组的第一个元素,因此为第二个子集操作返回它(并且没有第 0 个元素)。

PS仅对于少数操作(例如==),逻辑值首先被强制转换为数字。感谢@IceCreamTouchan 在上面的评论中添加这个。


推荐阅读