Sayısal olarak dönüştürmek istediğim karakterleri içeren bir liste döndüren bir işlev var. Çoğu zaman, listenin tüm öğeleri kolayca sayısal olarak zorlanabilir:As.numerik'in yalnızca nümerik olarak (R olarak) kodlanabilecek öğelerin öğelerine uygulanması (R)
ve böylece basit bir lapply(x, FUN = as.numeric)
düzgün çalışıyor.
örn.
ör:
l <- list(a = c("1","1"), b = c("2","2"))
l
$a
[1] "1" "1"
$b
[1] "2" "2"
lapply(l, FUN = as.numeric)
$a
[1] 1 1
$b
[1] 2 2
Bununla birlikte, bazı durumlarda, vektörler doğru karakter içeren
l <- list(a = c("1","1"), b = c("a","b"))
l
$a
[1] "1" "1"
$b
[1] "a" "b"
lapply(l, FUN = as.numeric)
$a
[1] 1 1
$b
[1] NA NA
Ben çalışmalarla gelmiş çözüm ama biraz dolambaçlı hisseder: Orada kimse önermek için daha akıcı ve zarif bir çözüm olsaydı
l.id <- unlist(lapply(l, FUN = function(x){all(!is.na(suppressWarnings(as.numeric(x))))}))
l.id
a b
TRUE FALSE
l[l.id] <- lapply(l[l.id], FUN = as.numeric)
l
$a
[1] 1 1
$b
[1] "a" "b"
Yani sadece merak ediyordum.
Teşekkürler!
i ile gelip 'lapply (l, function (x) {(grepl ("^ \\ d + $", x), as.numeric (x) x) ifelse})' ne bütün anlamına geliyor? –
@AvinashRaj Ayrıca kullanılabileceğini düşünüyorum, ancak karışık sınıf varsa, uyarılarla ortaya çıkacaktır. yani l $ a [2] <- 'a'' – akrun
@akrun Benim durumumda, ilk seçenek en uygun ancak gelecekteki referans için ikinci seçeneği bilmek iyidir. –