Как исправить в R: dim(X) должен иметь положительную длину


Одна ошибка, с которой вы можете столкнуться в R:

Error in apply(df$var1, 2, mean) : dim(X) must have a positive length

Эта ошибка возникает, когда вы пытаетесь использовать функцию apply() для вычисления некоторой метрики для столбца фрейма данных или матрицы, но при этом предоставляете вектор в качестве аргумента вместо фрейма данных или матрицы.

В этом руководстве рассказывается, как именно исправить эту ошибку.

Как воспроизвести ошибку

Предположим, у нас есть следующий фрейм данных в R:

#create data frame
df <- data.frame(points=c(99, 97, 104, 79, 84, 88, 91, 99),
 rebounds=c(34, 40, 41, 38, 29, 30, 22, 25),
 blocks=c(12, 8, 8, 7, 8, 11, 6, 7))

#view data frame
df

 points rebounds blocks
1 99 34 12
2 97 40 8
3 104 41 8
4 79 38 7
5 84 29 8
6 88 30 11
7 91 22 6
8 99 25 7

Теперь предположим, что мы пытаемся использовать функцию apply() для вычисления среднего значения в столбце «точки»:

#attempt to calculate mean of 'points' column
apply(df$points, 2, mean)

Error in apply(df$points, 2, mean) : dim(X) must have a positive length

Ошибка возникает из-за того, что функция apply() должна применяться к фрейму данных или матрице, однако в этом примере мы пытаемся применить ее к определенному столбцу во фрейме данных.

Как исправить ошибку

Чтобы исправить эту ошибку, просто укажите имя фрейма данных в функции apply() следующим образом:

#calculate mean of every column in data frame
apply(df, 2, mean)

 points rebounds blocks 
 92.625 32.375 8.375

Из вывода мы можем увидеть среднее значение каждого столбца во фрейме данных. Например, среднее значение столбца «баллы» равно 92,625 .

Мы также можем использовать эту функцию, чтобы найти только среднее значение определенных значений во фрейме данных:

#calculate mean of 'points' and 'blocks' column in data frame
apply(df[c('points', 'blocks')], 2, mean)

points blocks 
92.625 8.375

Наконец, если мы хотим найти среднее значение только одного столбца, мы можем использовать функцию mean() вообще без использования функции apply() :

#calculate mean of 'points' column
mean(df$points)

[1] 92.625

Дополнительные ресурсы

В следующих руководствах объясняется, как устранять другие распространенные ошибки в R:

Как исправить в R: имена не совпадают с предыдущими именами
Как исправить в R: более длинная длина объекта не кратна более короткой длине объекта
Как исправить в R: контрасты могут применяться только к факторам с 2 или более уровнями

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.