2012-06-02 13 views

Respuesta

44

No muestra un ejemplo reproducible pero su mensaje de advertencia le dice exactamente cuál es el problema.

memb tiene solo una longitud de 10. Supongo que la longitud de dih_y2 $ MemberID no es un múltiplo de 10. Al usar == se escupirá una advertencia si no es múltiple para permitirte sepa que probablemente no está haciendo lo que espera que esté haciendo. == hace la verificación de elementos para la igualdad. Sospecho que quieres hacer si encuentras cuál de los elementos de dih_y2$MemeberID también está en el vector memb. Para hacer esto, querrá usar el operador %in%.

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

Al realizar una comparación booleano entre dos vectores en R, la "expectativa" es que ambos vectores son de la misma longitud, de manera que R se puede comparar cada elemento correspondiente a su vez.

R tiene una característica muy querida (u odiada) llamada recycling, por lo que en muchas circunstancias si intenta hacer algo donde R normalmente esperaría que los objetos tengan la misma longitud, extenderá automáticamente, o reciclará, el más corto objeto para obligar a ambos objetos a ser de la misma longitud.

Si el objeto más largo es un múltiplo del más corto, esto equivale simplemente a repetir el objeto más corto varias veces. A menudo, los programadores de R se aprovecharán de esto para hacer las cosas de forma más compacta y con menos tipeo.

Pero si no son múltiplos, a R le preocupará que haya cometido un error, y tal vez no haya querido realizar esa comparación, de ahí la advertencia.

Explora mismo con el siguiente código:

> 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 
Cuestiones relacionadas