r错误暗淡(X)必须有正长度?

tim*_*ime 27 r

我想计算内置矩阵的"人口"的平均值state.x77.代码是:

apply(state.x77[,"Population"],2,FUN=mean)

#Error in apply(state.x77[, "Population"], 2, FUN = mean) : 

# dim(X) must have a positive length
Run Code Online (Sandbox Code Playgroud)

我该如何防止此错误?如果我使用$标志

apply(state.x77$Population,2,mean)
# Error in state.x77$Population : $ operator is invalid for atomic vectors
Run Code Online (Sandbox Code Playgroud)

什么是原子矢量?

the*_*ail 36

要扩展joran的评论,请考虑:

> is.vector(state.x77[,"Population"])
[1] TRUE
> is.matrix(state.x77[,"Population"])
[1] FALSE
Run Code Online (Sandbox Code Playgroud)

因此,您的Population数据现在与任何其他向量没有区别,例如1:10,它既没有列也没有列apply.它只是一系列没有更高级结构或维度的数字.例如

> apply(1:10,2,mean)
Error in apply(1:10, 2, mean) : dim(X) must have a positive length
Run Code Online (Sandbox Code Playgroud)

这意味着您可以mean直接对您选择的矩阵子集使用该函数:例如:

> mean(1:10)
[1] 5.5
> mean(state.x77[,"Population"])
[1] 4246.42
Run Code Online (Sandbox Code Playgroud)

要更多地解释'原子'向量,请再次参阅R FAQ(这会有点复杂,所以请坚持下去)......

R有六种基本('原子')矢量类型:逻辑,整数,实数,复数,字符串(或字符)和原始. http://cran.r-project.org/doc/manuals/r-release/R-lang.html#Vector-objects

因此,在这种情况下,原子是指向量作为R对象的基本构建块(就像原子构成了现实世界中的所有东西).

如果您通过输入?"$"命令来阅读R的内联帮助,您会发现它说:

'$'仅对递归对象有效,并且仅在下面的递归对象部分中讨论.

由于向量(例如1:10)是基本构建块("原子"),没有递归子元素,因此尝试使用$它们来访问它们的部分将不起作用.

由于你的matrix(statex.77)基本上只是一个具有某些维度的向量,例如:

> str(matrix(1:10,nrow=2))
 int [1:2, 1:5] 1 2 3 4 5 6 7 8 9 10
Run Code Online (Sandbox Code Playgroud)

...您也无法使用$访问子部件.

> state.x77$Population
Error in state.x77$Population : $ operator is invalid for atomic vectors
Run Code Online (Sandbox Code Playgroud)

但是您可以使用以下[名称访问子部件:

> state.x77[,"Population"]
   Alabama         Alaska        Arizona...
      3615            365           2212...
Run Code Online (Sandbox Code Playgroud)