【发布时间】:2021-10-11 04:22:35
【问题描述】:
给出的是下面的列表。此列表包含可变长度的字符向量。
l1 <- list("a" = c("x1", "x2", "x3"),
"b" = c("x4", "x5"),
"c" = c("x6", "x7", "x8", "x9"))
> l1
$a
[1] "x1" "x2" "x3"
$b
[1] "x4" "x5"
$c
[1] "x6" "x7" "x8" "x9"
所需的输出,我们称之为l2,如下所示:
$a
[1] 1 1 1
$b
[1] 2 2
$c
[1] 3 3 3 3
此输出具有以下特点:
-
l2是一个命名列表,其中保留了原始列表l1的名称。 - 列表
l2的长度与列表l1相同。 -
l1中列表元素的顺序保留在l2中。 -
l2包含具有重复整数的向量。l2中每个向量的长度与l1中对应的字符向量相同。
部分解决方案
我找到了this post,其中下面的语句帮助我构建了部分解决方案。
通常的解决方法是将向量的名称或索引而不是向量本身传递给它。
l2 <- lapply(X = seq_along(l1),
FUN = function(x) rep(x, times = length(l1[[x]])))
l2
[[1]]
[1] 1 1 1
[[2]]
[1] 2 2
[[3]]
[1] 3 3 3 3
满足所有条件,但名称未保留在 l2 中。
如何一次性解决此问题(不在 lapply 语句后使用单独的语句)?
【问题讨论】: