簡體   English   中英

R中遞歸連接列表的列表

[英]List of recursively concatenated lists in R

是否有一種簡潔的方法來在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]

是什么賦予了?

一種選擇可能是

 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM