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)
你想要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)