88

编码:

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'

谢谢,

4

5 回答 5

156

如果要将 的所有元素转换a为单个数字向量并且length(a)大于 1(好的,即使它的长度为 1),您可以unlist先转换对象,然后再转换。

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

请记住,这里没有任何质量控制。还有X$Days一个很奇怪的名字。

于 2012-09-12T08:39:45.157 回答
44

如果您的列表作为多个元素需要转换为数字,您可以使用lapply(a, as.numeric).

于 2012-09-12T08:41:36.590 回答
9

您还可以使用列表子集来选择要转换的元素。如果您的列表包含 1 个以上的元素,这将很有用。

as.numeric(a[[1]])

于 2015-05-22T17:44:59.343 回答
2

在这种情况下,循环也可以完成这项工作(并且通常足够快)。

a <- array(0, dim=dim(X))
for (i in 1:ncol(X)) {a[,i] <- X[,i]}
于 2018-10-01T13:10:17.093 回答
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)))
}
于 2015-08-27T20:12:40.187 回答