新手R问题:为什么我的布尔矢量未按预期过滤?我不知道为什么它只过滤第一个元素而不是第3个和第5个元素。
> nums = seq(1,6); nums
[1] 1 2 3 4 5 6
> filter = c(TRUE,FALSE,TRUE,FALSE,TRUE,FALSE)
> nums[filter]
[1] 1 3 5 #<<==WORKS AS EXPECTED
> nums[-filter]
[1] 2 3 4 5 6 #<<==NOT EXPECTED, EXPECTING 2 4 6
顺便说一下,我已经尝试了这个并且它有效,但我认为你可以省略带负号的矢量子集中的项目......
> nums[!filter]
[1] 2 4 6
答案 0 :(得分:2)
由于-filter
返回-1,0,-1,0,-1,0
,我假设R返回nums[-1]
并忽略-filter
向量的其余部分。显然!filter
是正确的继续进行方式。
答案 1 :(得分:1)
这是一个有用的例子,说明了@Glen在过滤器前使用-
或!
时已经说过的内容。
filter = c(TRUE, FALSE, TRUE, FALSE, TRUE, FALSE)
-filter
#> [1] -1 0 -1 0 -1 0
!filter
#> [1] FALSE TRUE FALSE TRUE FALSE TRUE
因此,传递-filter意味着第一列从nums