Подтвердить что ты не робот

Как принудить объект списка к типу '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'

Спасибо,

4b9b3361

Ответ 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)))
}