`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"
取消列出 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"