2012-04-24 3 views
5

Ich habe die zwei große und kleine Liste. Ich möchte wissen, welche der Elemente in der großen Liste nicht in der kleineren Liste sind. Die Liste besteht aus EigenschaftFinden Sie Elemente nicht in kleineren Zeichen Vektor-Liste, aber in der großen Liste

([1] "character"   "vector"    "data.frameRowLabels" 
[4] "SuperClassMethod" 

Hier ist kleines Beispiel und Fehler I

A <- c("A", "B", "C", "D") 
B <- c("A", "B", "C") 
    new <- A[!B] 
Error in !B : invalid argument type 

Die erwartete Ausgabe neuer bin immer ist < - c ("D")

Antwort

11

Blick auf help("%in%") - es gibt ein Beispiel ganz unten auf dieser Seite, das diese Situation anspricht.

A <- c("A", "B", "C", "D") 
B <- c("A", "B", "C") 
(new <- A[which(!A %in% B)]) 

# [1] "D" 

EDIT:

Als Tyler weist darauf hin, soll ich meinen eigenen Rat nehmen und die Support-Dokumente lesen. which() ist nicht erforderlich, wenn in diesem Beispiel %in% verwendet wird. So,

+0

die, die hier nicht erforderlich ist. –

+0

@Tyler, Sie haben Recht; Ich sollte meinen eigenen Ratschlag nehmen: von 'help ("% in% ")': "Das% in% kehrt nie zurück NA macht es besonders nützlich, wenn Bedingungen gegeben sind". Ich habe 'what' aus Gewohnheit eingefügt, da ich mich ohne es verbrannt habe. Hier ist es unnötig. – BenBarnes

4

! funktioniert nur auf logischen Vektoren. B ist nicht logisch, was den Fehler verursacht. Das Zerlegen der Schritte, die Sie versuchen, wird Ihnen dies zeigen (z. B. !B). In diesem Fall möchten Sie %in% (oder match) verwenden.

A[!A %in% B] 

Um den obigen Code zu zersetzen:

  1. A %in% B erzeugt einen Vektor, die logischen TRUE für Werte von A ist, die in B existieren.
  2. !A %in% B negiert (umkehrt) die Logik in (1)
  3. A[!A %in% B] gibt den Vektor von Elementen, die TRUE in (2)
1

sind Während ich denke sets Sie mit verschiedenen Listen behandeln helfen können.

In Ihrem Fall können Sie nur verwenden:

A <- c("A", "B", "C", "D") 
B <- c("A", "B", "C") 

# to find difference 
setdiff(A, B) 

# to find intersect 
intersect(A, B) 

# to find union 
union(A, B) 
Verwandte Themen