[英]r Error dim(X) must have a positive length?
我想计算内置矩阵state.x77
的“Population”的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
我该如何防止此错误? 如果我使用$
sign
apply(state.x77$Population,2,mean)
# Error in state.x77$Population : $ operator is invalid for atomic vectors
什么是原子矢量?
要扩展joran的评论,请考虑:
> 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 FAQ(这有点复杂,所以请坚持下去)......
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...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.