Ceci est dû au recyclage. Si les vecteurs ont des longueurs différentes, le vecteur le plus court est recyclé dans l'ordre indiqué.
Comparer les suivantes:
> mask=c(F)
> v[mask]
numeric(0)
> mask=c(T)
> v[mask]
[1] 1 2 3 4 5
> mask=c(T, F, T, F)
> v[mask]
[1] 1 3 5
Dans le premier exemple, F
est recyclé 5 fois, donc pas de valeurs sont imprimées - le contraire qui se passe dans le deuxième exemple.
Dans le troisième exemple 2 et 4 sont omis, car ils sont indexés avec F
, mais le masque est recyclée pour obtenir un T
pour l'élément 5
Modifier Le résultat recherché étant de 1, 2, 3, 4? Essayez masque < - c (T, T, T, T, F)
C'est ce qui permet énoncé comme
v[v != 5]
Parce que la comparaison est recyclée sur le vecteur tout
http Peut-être utiles: //stackoverflow.com/questions/9335099/implementation-of-standard-recycling-rules R recycle le plus petit vecteur. – PereG