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?

25
r
demandé sur m0nhawk 2013-05-22 06:35:22

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...
32
répondu thelatemail 2016-03-02 22:19:03