2017-09-18 1 views
2

Frage des Novizen R: Warum wird mein boolescher Vektor nicht wie erwartet gefiltert? Ich weiß nicht, warum es nur das erste Element filtert und nicht auch das 3. und 5..R Filter funktioniert nicht wie erwartet

> 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, ich habe dies versucht und es funktioniert, aber ich dachte, dass Sie Elemente aus einer Vektor-Teilmenge mit dem negativen Vorzeichen weglassen könnte ...

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

'nums fallen gelassen wird [-Welches (Filter)]' funktioniert auch. – thelatemail

Antwort

2

Seit -filter kehrt -1,0,-1,0,-1,0, gehe ich davon aus R Zurückgeben nums[-1] und den Rest des Vektors -filter ignorieren. Offensichtlich ist !filter der richtige Weg, um fortzufahren.

+1

Erwähnenswert, dass '! TRUE = FALSE' wo als '-TRUE = -1' – Mako212

1

Hier ist ein ausgearbeitetes Beispiel, das zeigt, was @Glen bereits gesagt hat, wenn - oder ! vor dem Filter verwendet wird.

filter = c(TRUE, FALSE, TRUE, FALSE, TRUE, FALSE) 

-filter 
#> [1] -1 0 -1 0 -1 0 

!filter 
#> [1] FALSE TRUE FALSE TRUE FALSE TRUE 

Daher -filter Durchlaßeinrichtungen die erste Spalte von nums

Verwandte Themen