Ответ 1
Чтобы расширить на комментарии 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...