2017-09-18 33 views
2

新手R問題:爲什麼我的布爾向量沒有按照預期在下面過濾?我不知道爲什麼它只是過濾第一個元素,而不是第三個和第五個。R過濾器沒有按預期工作

> 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 

BTW,我已經試過這和它的作品,但我想你可以從與負號的矢量子集省略項...

> nums[!filter] 
[1] 2 4 6 
+2

'NUMS下降[哪位(過濾器)]'也有效。 – thelatemail

回答

2

由於-filter回報-1,0,-1,0,-1,0,我假設R是返回nums[-1]並忽略其餘的-filter向量。顯然!filter是繼續進行的正確方法。

+1

值得一提的是'!TRUE = FALSE',其中'-TRUE = -1' – Mako212

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