Как принудить объект списка к типу 'double'
Код:
a <- structure(list(`X$Days` = c("10", "38", "66", "101", "129", "185", "283",
"374")), .Names = "X$Days")
Тогда a
похоже на
$`X$Days`
[1] "10" "38" "66" "101" "129" "185" "283" "374"
Я хотел бы принудить a
к массиву числовых значений, но функции coercing возвращают мне
Error: (list) object cannot be coerced to type 'double'
Спасибо,
Ответы
Ответ 1
Если вы хотите преобразовать все элементы a
в один числовой вектор, а length(a)
- больше 1 (ОК, даже если длина 1), вы могли бы unlist
сначала объект, а затем преобразовать.
as.numeric(unlist(a))
# [1] 10 38 66 101 129 185 283 374
Имейте в виду, что здесь нет никаких контролей качества. Кроме того, X$Days
могучее нечетное имя.
Ответ 2
Если ваш список состоит из нескольких элементов, которые необходимо преобразовать в числовые, вы можете достичь этого с помощью lapply(a, as.numeric)
.
Ответ 3
Вы также можете использовать подмножество списка, чтобы выбрать элемент, который хотите преобразовать. Было бы полезно, если бы в вашем списке было более 1 элемента.
as.numeric(a[[1]])
Ответ 4
Есть проблемы с некоторыми данными. Рассмотрим:
as.double(as.character("2.e")) # This results in 2
Другое решение:
get_numbers <- function(X) {
X[toupper(X) != tolower(X)] <- NA
return(as.double(as.character(X)))
}