R中递归连接列表的列表

时间:2016-04-21 13:16:53

标签: r list recursion

是否有简明方法在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]

是什么给出了?

1 个答案:

答案 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