R-不列出时将其他元素强制转换为字符

时间:2019-05-03 10:52:38

标签: r list

我无法理解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"

1 个答案:

答案 0 :(得分:1)

这是列表和向量的属性的简要摘要。可以在this book中找到更多详细信息。

广义上讲,R中有两种不同的一维数据结构。

  1. 原子向量:原子向量的所有元素都必须是同一类型

  2. 列表:列表的元素可以具有不同的类型

原子向量的所有元素都必须是同一类型,因此当您尝试组合不同类型时,它们将被强制转换为最灵活的类型。从最小到最灵活的类型是:逻辑,整数,双精度和字符。

例如,将一个字符和一个整数组合会产生一个字符:

str(c("a", 1))

如您所见:强制通常会自动发生。