2013-05-22 558 views
23

我想计算内置矩阵state.x77的“总体”的平均值。代码是:r错误dim(X)必须具有正的长度吗?

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 

什么是原子矢量?

+3

但无论如何,如果你只是干这一行一列,为什么不'平均(state.x77 [, “人口”])'? – joran

+0

@joran非常感谢。参考常见问题和均值(state.x77 [,“人口”])都是有益的。 – time

回答

29

要扩大joran的意见,认为:

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

所以,你Population数据现在已经没有任何其他向量diferent,像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... 
+0

这是如何工作在类似的数据例如 '> 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 ....... – Ankit

相关问题