我有一个向量L
和列表> str(L)
List of 2
$ A:List of 2
..$ alpha: num 1
..$ beta : num 2
$ B:List of 2
..$ alpha: num 1
..$ beta : num 2
如下所示:
V
我需要将L
的元素分散到> str(L3)
List of 5
$ a:List of 2
..$ A:List of 3
.. ..$ alpha: num 1
.. ..$ beta : num 2
.. ..$ gamma: chr "a"
..$ B:List of 3
.. ..$ alpha: num 1
.. ..$ beta : num 2
.. ..$ gamma: chr "a"
$ b:List of 2
..$ A:List of 3
.. ..$ alpha: num 1
.. ..$ beta : num 2
.. ..$ gamma: chr "b"
..$ B:List of 3
.. ..$ alpha: num 1
.. ..$ beta : num 2
.. ..$ gamma: chr "b"
$ c:List of 2
..$ A:List of 3
.. ..$ alpha: num 1
.. ..$ beta : num 2
.. ..$ gamma: chr "c"
..$ B:List of 3
.. ..$ alpha: num 1
.. ..$ beta : num 2
.. ..$ gamma: chr "c"
$ d:List of 2
..$ A:List of 3
.. ..$ alpha: num 1
.. ..$ beta : num 2
.. ..$ gamma: chr "d"
..$ B:List of 3
.. ..$ alpha: num 1
.. ..$ beta : num 2
.. ..$ gamma: chr "d"
$ e:List of 2
..$ A:List of 3
.. ..$ alpha: num 1
.. ..$ beta : num 2
.. ..$ gamma: chr "e"
..$ B:List of 3
.. ..$ alpha: num 1
.. ..$ beta : num 2
.. ..$ gamma: chr "e"
,就像使用数组做外部产品一样,最终看起来像这样:
L3 <- lapply(V, function(x) lapply(L,function(y) c(y,gamma = x)))
L3 <- setNames(L3, V)
请注意,V中的元素不仅出现在每个子子列表中,而且还作为每个子列表的名称。
我想出的是:
lapply
嵌套的outer
函数看起来很难看,反直觉。我尝试通过在基础R中尝试rlist
函数来消除它,但显然这不起作用。所以我正在寻找一种仍然“功能”但更清洁,更直观的解决方案。谢谢!
P.S。我最近在学习rlist
并发现它非常方便,所以loginFb
解决方案也非常有用。 @坤仁
答案 0 :(得分:1)
我不熟悉rlist
,但只是修补它看起来就像你可以做的那样
library(rlist)
setNames(Map(list.update, rep(list(L), length(V)), gamma = V), V)
但它似乎并不比你已经用lapply()
做的更好。 str()
看起来与问题中的内容相同。
数据:强>
L <- structure(list(A = structure(list(alpha = 1, beta = 2), .Names = c("alpha",
"beta")), B = structure(list(alpha = 1, beta = 2), .Names = c("alpha",
"beta"))), .Names = c("A", "B"))