是否有简明方法在R中创建递归连接列表列表?
以下是我想要解决的问题类型的具体说明:给出两个列表,例如
u <- list("A", list("B", list("C", "D")), "E")
v <- c("x", "y")
我想(递归地)生成以下字符向量列表
w <- list(c("A", "x"), c("A", "y"),
c("B", "C", "x"), c("B", "C", "y"),
c("B", "D", "x"), c("B", "D", "y"),
c("E", "x"), c("E", "y"))
“简洁”是指R-idiomatic方式,具有最少数量的显式for循环。
我尝试了什么:我首先尝试解决成对并置的更基本问题,即形成列表的问题,如
r <- list(c("A", "x"), c("A", "y"), c("B", "x"), c("B", "y"),
c("C", "x"), c("C", "y"))
来自两个列表,如
p <- list("A", "B", "C")
q <- list("x", "y")
然而,执行看似明智的操作
outer(p, q, FUN = "c")
抛出异常
dims [product 6] do not match the length of object [12]
是什么给出了?
答案 0 :(得分:3)
一个选项可能是
w1 <- do.call(c,lapply(u, function(x) {
x1 <- if(!is.list(x)) outer(x,v, FUN=paste)
else t(outer(do.call(paste, x), v, FUN= paste))
strsplit(x1, " ")}))
identical(w, w1)
#[1] TRUE