2012-06-02 8 views

Antwort

44

Sie geben kein reproduzierbares Beispiel, aber Ihre Warnmeldung sagt Ihnen genau, was das Problem ist.

memb nur eine Länge von 10 hat. Ich rate die Länge von dih_y2 $ MemberID ist kein Vielfaches von 10. Wenn Sie == verwenden, wird es eine Warnung ausspucken, wenn es kein Vielfaches ist Wissen Sie, dass es wahrscheinlich nicht das tut, was Sie erwarten. == prüft elementweise auf Gleichheit. Ich vermute, was Sie tun möchten, wenn Sie herausfinden, welche der Elemente dih_y2$MemeberID auch im Vektor memb sind. Um dies zu tun, möchten Sie den Operator %in% verwenden.

dih_col <- which(dih_y2$MemeberID %in% memb) 
16

Wenn Sie eine Boolesche Vergleich zwischen zwei Vektoren in R, die „Erwartung“ durchzuführen ist, dass beide Vektoren die gleiche Länge haben, so daß R jedes entsprechende Element wiederum vergleichen.

R hat ein viel geliebtes (oder gehasstes) Feature namens recycling, wobei in vielen Fällen, wenn Sie versuchen, etwas zu tun, wo R normalerweise erwarten würde, dass Objekte die gleiche Länge haben, es automatisch verlängert oder recycelt Objekt, um beide Objekte auf die gleiche Länge zu zwingen.

Wenn das längere Objekt ein Vielfaches des kürzeren Objekts ist, wird das kürzere Objekt einfach mehrmals wiederholt. Oft nutzen R-Programmierer dies, um Dinge kompakter und mit weniger Tipparbeit zu erledigen.

Wenn sie jedoch keine Vielfachen sind, wird R befürchten, dass Sie einen Fehler gemacht haben, und vielleicht nicht diesen Vergleich durchführen wollen, daher die Warnung.

erkunden, sich mit dem folgenden Code:

> x <- 1:3 
> y <- c(1,2,4) 
> x == y 
[1] TRUE TRUE FALSE 
> y1 <- c(y,y) 
> x == y1 
[1] TRUE TRUE FALSE TRUE TRUE FALSE 
> y2 <- c(y,2) 
> x == y2 
[1] TRUE TRUE FALSE FALSE 
Warning message: 
In x == y2 : 
    longer object length is not a multiple of shorter object length 
Verwandte Themen