【问题标题】:r Error dim(X) must have a positive length?r 错误 dim(X) 必须具有正长度?
【发布时间】:2013-05-22 02:35:22
【问题描述】:

我想计算内置矩阵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

我怎样才能防止这个错误?如果我使用$ 符号

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

什么是原子向量?

【问题讨论】:

  • 但无论如何,如果您只是为一列执行此操作,为什么不只是 mean(state.x77[,"Population"])
  • @joran 非常感谢。参考常见问题解答和 mean(state.x77[,"Population"]) 都是有益的。

标签: r


【解决方案1】:

要扩展 joran 的 cmets,请考虑:

> is.vector(state.x77[,"Population"])
[1] TRUE
> is.matrix(state.x77[,"Population"])
[1] FALSE

因此,您的 Population 数据现在与任何其他向量(例如 1:10)没有区别,后者既没有列也没有行可与 apply 对抗。它只是一串数字,没有更高级的结构或维度。例如

> apply(1:10,2,mean)
Error in apply(1:10, 2, mean) : dim(X) must have a positive length

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

> mean(1:10)
[1] 5.5
> mean(state.x77[,"Population"])
[1] 4246.42

要更多地解释“原子”向量,请再次查看 R 常见问题解答(这有点复杂,所以请抓住你的帽子)...

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

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

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

‘$’只对递归对象有效,并且只 在下面关于递归对象的部分中讨论。

由于向量(如1:10)是基本构建块(“原子”),没有递归子元素,因此尝试使用$ 访问其中的一部分是行不通的。

由于您的矩阵 (statex.77) 本质上只是一个具有某些维度的向量,例如:

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

...您也不能使用$ 访问子部分。

> state.x77$Population
Error in state.x77$Population : $ operator is invalid for atomic vectors

但您可以使用 [ 和类似名称访问子部分:

> state.x77[,"Population"]
   Alabama         Alaska        Arizona...
      3615            365           2212...

【讨论】:

  • 这是如何在类似的数据上工作的,例如`> is.vector(state.center$x) [1] TRUE > is.matrix(state.center$x) [1] FALSE > state.center$x [1] -86.7509 -127.2500 -111.6250 -92.2992 -119.7730 .......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-04
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
相关资源
最近更新 更多