Как принудить объект списка ввести '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 в массив числовых значений, но принудительные функции возвращают меня



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


спасибо,

527   5  
r

5 ответов:

если вы хотите конвертировать все элементы a к одному числовому вектор и length(a) больше 1 (хорошо, даже если он имеет длину 1), вы могли бы unlist объект сначала, а затем конвертировать.

as.numeric(unlist(a))
# [1]  10  38  66 101 129 185 283 374

имейте в виду, что здесь нет контроля качества. Кроме того,X$Days очень странное имя.

Если ваш список как несколько элементов, которые должны быть преобразованы в числовые, вы можете достичь этого с помощью lapply(a, as.numeric).

вы также можете использовать поднабор списка, чтобы выбрать элемент, который вы хотите преобразовать. Было бы полезно, если бы в вашем списке было более 1 элемента.

as.numeric(a[[1]])

есть проблемы с некоторыми данными. Рассмотрим:

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)))
}

в этом случае цикл также будет выполнять эту работу (и обычно достаточно быстро).

a <- array(0, dim=dim(X))
for (i in 1:ncol(X)) {a[,i] <- X[,i]}

Comments

    Ничего не найдено.