Re,
le problème vient de ton code. Dans le apply tu lui dis d'appliquer une fonction qui dépend de x 'function(x)' mais à la droite de cette fonction tu ne te sers pas de cet argument mais de a 'all(abs(a-a[1,])<1e-7)', donc a chaque ligne il va comparer non pas la ligne mais la matrice a tout entier avec la première ligne de a. Tu pourrais avoir 100000 lignes tu aurais toujours le même résultat parce que tu reproduis le même calcul à chaque ligne :
Code : Tout sélectionner
z <- matrix(rep(c(1,2),each=1000),ncol=2)
table(apply(z,1,function(x) all(abs(z-z[1,])<1e-7))) ### 1000 fois FALSE alors que tout les lignes sont égales à la première ...
table(apply(z,1,function(x) all(abs(x-z[1,])<1e-7))) # la tu as 1000 fois TRUE
Le x de function(x) va être remplacer par les valeurs de ta ligne. Dans ta fonction le x va être remplacer par la valeur de cet argument : quand tu fais mean(de quelque chose) c'est comme si tu faisais mean(x=quelque chose), x va prendre au sein de ta fonction les valeurs que tu auras spécifier en argument. Si tu écris function(x) all(z-2<0) comme z n'est pas spécifié dans les argument de ta fonction, alors la fonction va chercher une valeur de z ailleurs que dans ta fonction, en l'occurrence dans l'environnement supérieur et s'il trouve une valeur alors il s'en servira. C'est exactement ce qui est arrivé ici. Dans ta fonction tu ne définis pas de z, donc il va chercher une valeur de z dans l'environnement supérieur (ici dans l'environnement global). Et tu répètes ça pour chaque ligne parce que à chaque fois aucune valeur de z n'est spécifier dans les argument de ta fonction.
En espérant que ça soit plus clair.
Maxime
P.S : pour mieux te rendre compte de ce qui se passe dans le apply :
FUN sera remplacer par la fonction que tu utiliseras, et à chaque ligne tu vas faire FUN(E=valeur de la ligne). Dons si dans ta fonction tu n'utilises pas E mais F il va aller chercher F ailleurs.