使用逻辑向量的向量索引

时间:2021-07-24 18:46:36

标签: r object vector logical-operators rgui

我是 R 的新手。我创建了一个对象 a: a <- c(2,4,6,8,10,12,14,16,18,20)

我对向量执行了以下操作: a[!c(10,0,8,6,0)] 我得到的输出为 4 10 14 20

我明白 !c(10,0,8,6,0) 产生的输出为 FALSE TRUE FALSE FALSE TRUE

我不明白最终结果是 4 10 14 20

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

我们得到结果是因为逻辑向量被回收(因为它的长度只有 5,而 length(a) 是 10)以满足'a'向量的结尾,即

i1 <- rep(!c(10,0,8,6,0), length.out = length(a))
i1
[1] FALSE  TRUE FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE  TRUE

如果我们使用那个向量

a[i1]
[1]  4 10 14 20

如果我们只是通过TRUE更容易理解,那么TRUE被循环返回所有元素或相反FALSE

a[TRUE]
 [1]  2  4  6  8 10 12 14 16 18 20
a[FALSE]
numeric(0)

回收在?Extract的文档中提到

<块引用>

对于 [-indexing only: i, j, ... 可以是逻辑向量,指示要选择的元素/切片。如有必要,这些向量会被回收以匹配相应的范围。 i, j, ... 也可以是负整数,表示元素/切片不在选择范围内。


在大多数语言中,0 被视为 FALSE,其他值被视为 TRUE。所以,当我们否定 0 (FALSE) 被转换为 TRUE 而所有其他的都被转换为 FALSE