Werfen wir einen Vektor Beispiel nehmen:
x <- c(1, 10, 30, 5)
Ich möchte mich bei allen Vielfachen von 10 in diesem Vektor zu beseitigen. Der Vektor von booleans zu meinem Zustand entspricht, kann wie folgt
b <- x %% 10 == 0
berechnet werden, wenn ich which(b)
ausführen, wird dies die Indizes wieder in den TRUE
Werte in b
entsprechen, so alle Werte auszuschließen, die ein Vielfaches von 10 sind, ich kann
x[ -which(b) ]
tun, aber wenn ich !
(der Negation-Operator) auf which(b)
anstelle von -
(der Befehl x[!which(b)]
werden), wird das Ergebnis völlig falsch sein, das ist, weil die Negation o puerator kann auf ganze Zahlen angewendet werden, ohne einen Fehler zurückzugeben: Wenn die ganze Zahl gleich 0 ist, gibt sie TRUE zurück, und wenn die ganze Zahl von 0 verschieden ist, wird FALSE
zurückgegeben (try !(-2:2)
).
Deshalb, wenn ich das richtige Ergebnis wollen mithilfe von !
, muss ich es anwenden direkt auf dem Vektor von booleans
x[ !b ]
Es tut mir leid, aber das ist sehr einfach. '!' ist logische Negation, '-' ist (in diesem Fall) eine unäre arithmetische Operation. Wenn Sie '!' Auf ganzzahlige Werte anwenden, wird '0' zu' FALSE' und alle anderen Zahlen zu 'TRUE' gezwungen: versuchen Sie'! (0: 5) '. – Roland
dann wie wäre es mit [welche ( $ ! = 0),] dies gibt mir eine richtige Antwort –
deepesh
Nun, sicher ist es. Ihnen ist bewusst, dass R eine logische, ganzzahlige und charakte- rische Teilmenge bietet? Und weißt du was 'was'? – Roland