2012-06-02 20 views

Odpowiedz

44

Nie podajesz odtwarzalnego przykładu, ale komunikat ostrzegawczy informuje dokładnie o problemie.

element ma długość tylko 10 lat. Domyślam się, że długość dih_y2 $ Identyfikator MemberID nie jest wielokrotnością liczby 10. Jeśli użyjesz ==, wypisze ostrzeżenie, jeśli nie jest to wielokrotność, wiem, że prawdopodobnie nie robi to, czego się spodziewasz. == sprawdza elementycznie pod kątem równości. Podejrzeń, co chcesz zrobić, jeśli znaleźć, które z elementów dih_y2$MemeberID są również w wektorze memb. Aby to zrobić, należy użyć operatora %in%.

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

Podczas wykonywania logiczną porównanie dwóch wektorów w R, „oczekiwanie” jest to, że oba wektory są tej samej długości, dzięki czemu można porównać każdy R odpowiedniego elementu z kolei.

R ma bardzo lubianą (lub znienawidzoną) funkcję o nazwie recycling, w której w wielu przypadkach, jeśli spróbujesz zrobić coś, w czym R normalnie oczekiwałoby, że obiekty będą tej samej długości, będzie automatycznie przedłużać lub zawracać obiekt zmuszający oba obiekty do tej samej długości.

Jeśli dłuższy obiekt jest wielokrotnością krótszego, oznacza to powtórzenie krótszego obiektu kilka razy. Często programiści R skorzystają z tego, aby robić rzeczy zwięźlej i przy mniejszym pisaniu.

Ale jeśli nie są wielokrotnościami, R będzie się martwić, że popełniłeś błąd i być może nie chciałeś przeprowadzić takiego porównania, stąd ostrzeżenie.

poznaj się z następującego kodu:

> 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 
Powiązane problemy