我是 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
有人可以帮忙吗?
我是 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
有人可以帮忙吗?
我们之所以获得结果,是因为逻辑向量被回收(因为它的长度只有 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