使用布尔值列表在R中建立索引的问题

使用布尔值列表在R中建立索引的问题,r,indexing,boolean,R,Indexing,Boolean,我有过几年的编程经验,但对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

我有过几年的编程经验,但对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对这些索引方法的处理方式不同吗

非常感谢

as.逻辑(c(0,0,0,1))==c(F,F,F,T)

解释 在
R
中,
数值的处理方式与
逻辑值的处理方式不同

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

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

逻辑值和数字值并不相等,只是对于某些操作(例如,当另一个参数是数字时,
==
)逻辑值被强制为数字
2
数组的第一个元素,这就是为什么在第二个子集操作中返回它(并且没有第0个元素)。如果您想使用
0
s和
1
s以这种方式进行子集,只需首先将它们作为.logical
传递给
s。如果我希望使用数值布尔向量进行索引,是否有最佳做法?我希望有一种比我目前的解决方案更好的方法:
sum(array*array\u index)
where
array\u index=c(0,0,0,1)
vector[as.logical(numeric\u vector\u of\u 0s\u和\u 1s)]
会有用的,谢谢你的帮助@冰淇淋是一个很好的答案!想把它作为一个整体发布吗?我还没有找到这个的副本,所以有一个关于这个的问题可以回答。