R erreur dim (X) doit avoir une longueur positive?
je veux calculer la moyenne de la "Population" de la matrice state.x77
. Les codes sont les suivants :
apply(state.x77[,"Population"],2,FUN=mean)
#Error in apply(state.x77[, "Population"], 2, FUN = mean) :
# dim(X) must have a positive length
comment puis-je éviter cette erreur? Si j'utilise $
signe
apply(state.x77$Population,2,mean)
# Error in state.x77$Population : $ operator is invalid for atomic vectors
Qu'est-ce qu'un vecteur atomique?
1 réponses
pour développer les commentaires de joran, considérez:
> is.vector(state.x77[,"Population"])
[1] TRUE
> is.matrix(state.x77[,"Population"])
[1] FALSE
alors, votre Population
les données ne sont plus diférentes des autres vecteurs, comme 1:10
, qui n'a ni colonnes ni lignes vers apply
contre. C'est juste une série de nombres sans structure ni dimension plus avancées. E. g.
> apply(1:10,2,mean)
Error in apply(1:10, 2, mean) : dim(X) must have a positive length
ce Qui signifie que vous pouvez simplement utiliser le mean
fonction directement contre le sous-ensemble de la matrice que vous avez sélectionné: par exemple:
> mean(1:10)
[1] 5.5
> mean(state.x77[,"Population"])
[1] 4246.42
à expliquer le vecteur 'atomique' plus, voir la FAQ R encore (et cela devient un peu complexe, alors tenez-vous à votre chapeau)...
R a six types de vecteurs de base (‘atomiques’): logique, entier, réel, complexe, chaîne de caractères (ou un personnage) et de matières. http://cran.r-project.org/doc/manuals/r-release/R-lang.html#Vector-objects
donc atomique dans ce cas se réfère aux vecteurs comme les blocs de construction de base des objets R (comme les atomes constituent tout dans le monde réel).
si vous lisez r's inline help en entrant ?"$"
comme une commande, vous trouverez qu'il est dit:
‘$’ est uniquement valable pour les objets, et n'est discuté dans la section ci-dessous sur les objets récursifs.
depuis les vecteurs (comme 1:10
) sont des blocs de base ("atomiques"), sans sous-éléments récursifs, essayant d'utiliser $
accéder à certaines parties d'entre elles ne marchera pas.
Depuis votre matrice (statex.77
) est essentiellement juste un vecteur avec quelques dimensions, comme:
> str(matrix(1:10,nrow=2))
int [1:2, 1:5] 1 2 3 4 5 6 7 8 9 10
...vous aussi vous ne pouvez pas utiliser $
pour accéder aux sous-parties.
> state.x77$Population
Error in state.x77$Population : $ operator is invalid for atomic vectors
mais vous pouvez accéder aux sous-parties en utilisant [
et des noms comme suit:
> state.x77[,"Population"]
Alabama Alaska Arizona...
3615 365 2212...