R过滤器未按预期工作

时间:2017-09-18 04:17:33

标签: r

新手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

2 个答案:

答案 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

中删除