Как решить проблему: попробуйте задать «имена столбцов»; на объекте с менее чем двумя измерениями


Сообщение об ошибке, с которым вы можете столкнуться при использовании R:

 Error in `colnames<-`(`*tmp*`, value = c("var1", "var2", "var3")): 
  attempt to set 'colnames' on an object with less than two dimensions

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

В следующем примере показано, как устранить эту ошибку на практике.

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

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

 #create data frame
df <- data. frame (team=c('A', 'A', 'C', 'B', 'C', 'B', 'B', 'C', 'A'),
                 points=c(12, 8, 26, 25, 38, 30, 24, 24, 15),
                 rebounds=c(10, 4, 5, 5, 4, 3, 8, 18, 22))

#view data frame
df

  team points rebounds
1 to 12 10
2 to 8 4
3 C 26 5
4 B 25 5
5 C 38 4
6 B 30 3
7 B 24 8
8 C 24 18
9 to 15 22

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

 #define new row to add to end of data frame
new_row <- c('D', 15, 11)

#attempt to define column names for new row
colnames(new_row) <- colnames(df)

Error in `colnames<-`(`*tmp*`, value = c("team", "points", "rebounds")): 
  attempt to set 'colnames' on an object with less than two dimensions

Мы получаем сообщение об ошибке, поскольку мы использовали функцию colnames() для вектора, а не для кадра данных или матрицы.

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

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

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

 #define new row to add to end of data frame
new_row <- data. frame ('D', 15, 11)

#define column names for new row
colnames(new_row) <- colnames(df)

#add new row to end of data frame
df <- rbind(df, new_row)

#view updated data frame
df

   team points rebounds
1 to 12 10
2 to 8 4
3 C 26 5
4 B 25 5
5 C 38 4
6 B 30 3
7 B 24 8
8 C 24 18
9 to 15 22
10 D 15 11

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

Затем мы можем успешно использовать rbind() для привязки новой строки к концу существующего фрейма данных.

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

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

Как исправить в R: аргументы содержат разное количество строк
Как исправить в R: ошибка выбора неиспользуемых аргументов
Как исправить в R: замена имеет нулевую длину

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *