2015-12-12 9 views
5

In Anbetracht der Vektoren:Vektorisierte ODER-Funktion, die FALSE | auswertet NA und NA | FALSCH als FALSCH?

vect1 <- c(TRUE,FALSE,FALSE,NA,NA,NA,TRUE,FALSE,NA,FALSE) 
vect2 <- c(TRUE,NA,FALSE,NA,FALSE,TRUE,FALSE,NA,TRUE,NA) 
vect3 <- vect1 | vect2 
vect3 #c(TRUE,NA,FALSE,NA,NA,TRUE,TRUE,NA,TRUE,NA) 

Gibt es eine vektorisiert Infix Funktion x, die Elemente wie folgt bewertet:

TRUE x TRUE #TRUE 
TRUE x FALSE #TRUE 
FALSE x TRUE #TRUE 
FALSE x FALSE #FALSE 
TRUE x NA #TRUE 
NA x TRUE #TRUE 
FALSE x NA #FALSE - would have been NA with ordinary "|" 
NA x FALSE #FALSE - would have been NA with ordinary "|" 
NA x NA #NA 

einen Vektor vect4 wie diese Producing:

vect4 #c(TRUE,FALSE,FALSE,NA,FALSE,TRUE,TRUE,FALSE,TRUE,FALSE) 

Oder gibt es jede andere einfache Methode zur Ausgabe vect4 von vect1 und vect2?

Antwort

7

Sie können die paralell maximal berechnen (mit na.rm = TRUE) und Konvertieren zu logical:

as.logical(pmax(vect1, vect2, na.rm = TRUE)) 
# [1] TRUE FALSE FALSE NA FALSE TRUE TRUE FALSE TRUE FALSE 

Man beachte, dass Maxima von logischen Vektoren, die durch Berechnen, TRUE als Integer interpretiert 1 und FALSE als ganze Zahl 0.

+0

Danke, das ist wirklich prägnant! – CarlAH