要扩展 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 常见问题解答(这有点复杂,所以请抓住你的帽子)......
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...