Как исправить в r: ошибка в sort.int(x, na.last, по убыванию,…): 'x' должен быть атомарным
Сообщение об ошибке, с которым вы можете столкнуться при использовании R:
Error in sort.int(x, na.last = na.last, decreasing = decreasing, ...): 'x' must be atomic
Эта ошибка возникает при попытке отсортировать список.
По умолчанию R способен сортировать только атомарные объекты, такие как векторы. Итак, чтобы использовать sort() со списком, вы должны сначала использовать функцию unlist() .
В следующем примере показано, как устранить эту ошибку на практике.
Как воспроизвести ошибку
Предположим, у нас есть следующий список в R:
#create list
some_list <- list(c(4, 3, 7), 2, c(5, 12, 19))
#view list
some_list
[[1]]
[1] 4 3 7
[[2]]
[1] 2
[[3]]
[1] 5 12 19
#view class
class(some_list)
[1] "list"
Теперь предположим, что мы пытаемся отсортировать значения в списке:
#attempt to sort the values in the list
sort(some_list)
Error in sort.int(x, na.last = na.last, decreasing = decreasing, ...):
'x' must be atomic
Мы получаем ошибку, поскольку R не способен напрямую сортировать списки.
Как избежать ошибки
Чтобы избежать ошибки, вы должны сначала использовать функцию unlist() следующим образом:
#sort values in list
sort(unlist(some_list))
[1] 2 3 4 5 7 12 19
Обратите внимание, что мы можем успешно отсортировать список значений без каких-либо ошибок, поскольку сначала мы использовали unlist() , который преобразовал список в числовой вектор.
По умолчанию R сортирует значения в порядке возрастания.
Однако мы можем использовать уменьшение=TRUE для сортировки значений в порядке убывания:
#sort values in list in descending order
sort(unlist(some_list), decreasing= TRUE )
[1] 19 12 7 5 4 3 2
Обратите внимание, что значения теперь отсортированы по убыванию.
Дополнительные ресурсы
В следующих руководствах объясняется, как исправить другие распространенные ошибки в R:
Как исправить в R: аргументы содержат разное количество строк
Как исправить в R: ошибка выбора неиспользуемых аргументов
Как исправить в R: неверные аргументы
Как восстановить в R: замена имеет нулевую длину