Як примусити об’єкт списку ввести „подвійний”


79

Код:

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'

Дякую,

Відповіді:


141

Якщо ви хочете перетворити всі елементи aв один числовий вектор і length(a)більше 1 (добре, навіть якщо він довжиною 1), ви можете unlistспочатку об'єкт, а потім перетворити.

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

Майте на увазі, що тут немає ніякого контролю якості. Крім того, X$Daysмогутнє дивне ім’я.


37

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


8

Ви також можете використовувати піднабір списків, щоб вибрати елемент, який потрібно перетворити. Було б корисно, якби у вашому списку було більше 1 елемента.

as.numeric(a[[1]])


1

У цьому випадку цикл також буде виконувати роботу (і, як правило, досить швидко).

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

0

Існують проблеми з деякими даними. Розглянемо:

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)))
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.