gpt4 book ai didi

r - 仅将as.numeric应用于可强制转换为数字(在R中)的列表元素

转载 作者:行者123 更新时间:2023-12-04 09:58:36 26 4
gpt4 key购买 nike

我有一个函数,该函数返回一个包含要转换为数字的单个字符向量的列表。大多数时候,列表中的所有元素都可以轻松地强制转换为数字:

因此,一个简单的lapply(x, FUN = as.numeric)可以正常工作。

例如

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

但是,在某些情况下,向量包含真实字符:

例如
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

我提供的解决方案可以工作,但有点令人费解:
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"

因此,我只是想知道是否有人可以提出更简化,更优雅的解决方案。

谢谢!

最佳答案

一种选择是检查向量中的所有元素是否只有数字,如果是,则转换为numeric或保持不变。

lapply(l, function(x) if(all(grepl('^[0-9.]+$', x))) as.numeric(x) else x)

或者我们可以使用 type.convert自动转换 class,但是 character向量将转换为 factor类。
lapply(l, type.convert)

关于r - 仅将as.numeric应用于可强制转换为数字(在R中)的列表元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32846176/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com