`unlist()` 或 `flatten()` 列表时缺少的因素

missing factors when `unlist()` or `flatten()` a list

取消列出 unlist() 或展平 flatten() 具有因子变量的列表时,因子值会在此过程中丢失。此外,当 unlist() 时,所有内容都转换为“字符”。哪种方法是正确的?下面是我想要的输出。谢谢。

L <- list(x = structure(1L, .Label = c("Jujutsu", "Kaisen"), class = "factor"), 
          y = 2020,
          z = "Shinjuku")

unlist()

unlist(L)
# x          y          z 
# "1"     "2020" "Shinjuku" 

flatten()

flatten(L)
# $x
# [1] 1
# 
# $y
# [1] 2020
# 
# $z
# [1] "Shinjuku"

期望的输出。

# $x
# [1] "Jujutsu" 
# 
# $y
# [1] 2020
# 
# $z
# [1] "Shinjuku"

一个选项可以是:

map(.x = L, ~ if(is.factor(.x)) as.character(.x) else .x)

$x
[1] "Jujutsu"

$y
[1] 2020

$z
[1] "Shinjuku"

您可以检查 is.factor 并转换子集。

f <- sapply(L, is.factor)
L[f] <- lapply(L[f], as.character)
L
# $x
# [1] "Jujutsu"
# 
# $y
# [1] 2020
# 
# $z
# [1] "Shinjuku"

这也为您提供了向量。

unlist(L)
#         x          y          z 
# "Jujutsu"     "2020" "Shinjuku" 

“2020”将保留字符,因为向量的所有元素必须是同一类型。

如果你使用的是 base R

,请尝试 type.convert
> type.convert(L, as.is = TRUE)
$x
[1] "Jujutsu"

$y
[1] 2020

$z
[1] "Shinjuku"