R中两个列表的元素组合

sin*_*sse 11 r elementwise-operations

说,我有两个清单:

list.a <- as.list(c("a", "b", "c"))

list.b <- as.list(c("d", "e", "f"))
Run Code Online (Sandbox Code Playgroud)

我想以递归方式组合这些列表,这样结果将是一个组合元素的列表,如下所示:

[[1]]
[1] a d

[[2]]
[1] a e

[[3]]
[1] a f

[[4]]
[1] b d
Run Code Online (Sandbox Code Playgroud)

等等.我觉得我在这里错过了一些相对简单的东西.有帮助吗?

干杯.

Mat*_*rde 13

expand.grid(list.1, list.b)data.frame结构中为您提供所需的结果.这往往是在R中处理数据的最有用的格式.但是,您可以通过调用apply和获得您要求的确切结构(保存顺序)lapply:

result.df <- expand.grid(list.a, list.b)
result.list <- lapply(apply(result.df, 1, identity), unlist)
Run Code Online (Sandbox Code Playgroud)

如果您希望按第一个元素排序此列表:

result.list <- result.list[order(sapply(result.list, head, 1))]
Run Code Online (Sandbox Code Playgroud)


dho*_*ius 7

你想要mapply(如果通过"递归"你的意思是"并行"):

mapply(c, list.a, list.b, SIMPLIFY=FALSE)
Run Code Online (Sandbox Code Playgroud)

或者这可能是你想要的更多:

unlist(lapply(list.a, function(a) lapply(list.b, function (b) c(a, b))), recursive=FALSE)
Run Code Online (Sandbox Code Playgroud)


小智 5

令人惊讶的是没有人提到这个简单的一个班轮:

as.list(outer(list.a,list.b, paste))

[[1]]
[1] "a d"

[[2]]
[1] "b d"

[[3]]
[1] "c d"

[[4]]
[1] "a e"
Run Code Online (Sandbox Code Playgroud)