Подтвердить что ты не робот

R Ошибка dim (X) должна иметь положительную длину?

Я хочу вычислить среднее значение "Население" встроенной матрицы 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

Что такое атомный вектор?

4b9b3361

Ответ 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...