Как исправить: объекту (списку) невозможно принудительно ввести «double»;


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

 Error: (list) object cannot be coerced to type 'double'

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

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

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

Следующий код пытается преобразовать список из нескольких элементов в числовые значения:

 #create list
x <- list(1:5, 6:9, 7)

#display list
x

[[1]]
[1] 1 2 3 4 5

[[2]]
[1] 6 7 8 9

[[3]]
[1] 7

#attempt to convert list to numeric
x_num <- as. numeric (x)

Error: (list) object cannot be coerced to type 'double'

Поскольку мы не использовали функцию unlist() , мы получили сообщение об ошибке (список нельзя принудительно ввести «double») .

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

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

 #create list
x <- list(1:5, 6:9, 7)

#convert list to numeric
x_num <- as. numeric (unlist(x))

#display numeric values
x_num

[1] 1 2 3 4 5 6 7 8 9 7

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

 #verify that x_num is numeric
class(x_num)

[1] "digital"

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

 #display total number of elements in original list
sum(lengths(x))

[1] 10

#display total number of elements in numeric list
length(x_num)

[1] 10

Мы видим, что две длины соответствуют.

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

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

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

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

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