Een lijstobject dwingen om ‘dubbel’ te typen

De code:

a <- structure(list(`X$Days` = c("10", "38", "66", "101", "129", "185", "283", 
                                 "374")), .Names = "X$Days")

Dan is a als

$`X$Days`
[1] "10"  "38"  "66"  "101" "129" "185" "283" "374"

Ik wil a dwingen tot een array van numerieke waarden, maar dwingende functies geven me terug

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

Bedankt,


Antwoord 1, autoriteit 100%

Als u alle elementen van a wilt converteren naar een enkele numerieke vector en length(a) groter is dan 1 (OK, zelfs als het lengte 1) heeft, kunt u het object eerst unlist en vervolgens converteren.

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

Houd er rekening mee dat er hier geen kwaliteitscontroles zijn. Ook X$Days een machtig vreemde naam.


Antwoord 2, autoriteit 27%

Als uw lijst uit meerdere elementen bestaat die naar numeriek moeten worden geconverteerd, kunt u dit bereiken met lapply(a, as.numeric).


Antwoord 3, autoriteit 6%

U kunt ook de lijst-subinstelling gebruiken om het element te selecteren dat u wilt converteren. Het zou handig zijn als je lijst meer dan 1 element zou hebben.

as.numeric(a[[1]])


Antwoord 4

In dit geval zal een lus ook het werk doen (en is meestal voldoende snel).

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

Antwoord 5

Er zijn problemen met sommige gegevens. Overweeg:

as.double(as.character("2.e")) # This results in 2

Een andere oplossing:

get_numbers <- function(X) {
    X[toupper(X) != tolower(X)] <- NA
    return(as.double(as.character(X)))
}

LEAVE A REPLY

Please enter your comment!
Please enter your name here

16 − 2 =

Other episodes