将列表转换为列表的列表

3

如何将字符串列表a转换为列表嵌套的列表b

a = list('A', 'B', 'C')

并转换为

b = list(list('A'), list('B'), list('C'))

1
lapply(a, list) - Donald Seinen
3个回答

5

将函数list应用到列表a

lapply(a, list)

[[1]]
[[1]][[1]]
[1] "A"


[[2]]
[[2]][[1]]
[1] "B"


[[3]]
[[3]][[1]]
[1] "C"


2
一种可能的解决方案是使用purrr::map函数:
library(purrr)

a = list('A', 'B', 'C')
b = list(list('A'), list('B'), list('C'))

a %>% map( ~ list(.x)) %>% identical(b)

#> [1] TRUE

a %>% map( ~ list(.x))

#> [[1]]
#> [[1]][[1]]
#> [1] "A"
#> 
#> 
#> [[2]]
#> [[2]][[1]]
#> [1] "B"
#> 
#> 
#> [[3]]
#> [[3]][[1]]
#> [1] "C"

或者简单地说:
map(a, list)

1

另一个基本的R选项:

Map(list, a)

输出

[[1]]
[[1]][[1]]
[1] "A"

[[2]]
[[2]][[1]]
[1] "B"

[[3]]
[[3]][[1]]
[1] "C"

基准测试

正如猜测的那样,lapply 是最快的。

enter image description here


1
感谢分享你的代码,看起来 lapplyMap 具有类似的功能。 - ah bon
1
@ahbon 实质上,Mapmapply的包装器。主要区别在于SIMPLIFY的默认值,对于Map而言为FALSE,而对于mapply则为TRUE。因此,mapply(list, a, SIMPLIFY = FALSE)将返回相同的结果。 - AndrewGB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接