我无法理解R的这种行为。
a <- list("a" = 1, "b" = 2, "c" = NA, "d" = Inf)
vec <- unlist(a, use.names=FALSE)
print(vec)
[1] 1 2 NA Inf
当列表中有一个字符值时,它将所有未列出的值强制转换为字符。为什么要这样做?而且,为什么NA 不强制字符?
a = list("a" = 1, "b" = 2, "c" = NA, "d" = Inf, "e" = "pass")
vec = unlist(a, use.names=FALSE)
print(vec)
[1] "1" "2" NA "Inf" "pass"
答案 0 :(得分:1)
这是列表和向量的属性的简要摘要。可以在this book中找到更多详细信息。
广义上讲,R中有两种不同的一维数据结构。
原子向量:原子向量的所有元素都必须是同一类型
列表:列表的元素可以具有不同的类型
原子向量的所有元素都必须是同一类型,因此当您尝试组合不同类型时,它们将被强制转换为最灵活的类型。从最小到最灵活的类型是:逻辑,整数,双精度和字符。
例如,将一个字符和一个整数组合会产生一个字符:
str(c("a", 1))
如您所见:强制通常会自动发生。