代码之家  ›  专栏  ›  技术社区  ›  user2359494

R为矩阵中的列表分配名称

  •  0
  • user2359494  · 技术社区  · 7 年前

    我通过Lx的每个参数值对Ly的每个值迭代一个函数。该函数生成一个列表,然后将列表放入矩阵中。我试图给结果列表命名,以便知道每次运行函数时使用的参数组合(Lx和Ly)。见以下可复制示例:

    test_sim <- function(Lx, Ly){
      results=list()
      ret <- runif(3, min=0, max=100)
      results[[1]]=ret
      names(results)[1]=paste(Lx,Ly,sep = "_")
      return(results)
    }
    Lx <- seq(0.25,0.5,0.25)
    Ly <- seq(0.05, 0.10, 0.05)
    blam <- sapply(Lx, function(x) mapply(test_sim, x, Ly))
    

    然而,这似乎只命名了矩阵的前两行。如何正确命名每个列表?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Maurits Evers    7 年前

    您可以使用 lapply 而不是 sapply .

    这将生成一个嵌套列表:

    # This produces a nested list
    blam <- lapply(Lx, function(x) mapply(test_sim, x, Ly))
    blam;
    #[[1]]
    #[[1]]$`0.25_0.05`
    #[1] 80.11677 60.42781 83.07715
    #
    #[[1]]$`0.25_0.1`
    #[1] 34.98122 13.24191 64.38831
    #
    #
    #[[2]]
    #[[2]]$`0.5_0.05`
    #[1] 56.466308  7.158086 66.655274
    #
    #[[2]]$`0.5_0.1`
    #[1] 66.88615 16.05237 43.16896
    

    然后,您可以使用 unlist(..., recursive = FALSE) :

    # Flatten nested list
    unlist(blam, recursive = FALSE);
    #$`0.25_0.05`
    #[1] 80.11677 60.42781 83.07715
    #
    #$`0.25_0.1`
    #[1] 34.98122 13.24191 64.38831
    #
    #$`0.5_0.05`
    #[1] 56.466308  7.158086 66.655274
    #
    #$`0.5_0.1`
    #[1] 66.88615 16.05237 43.16896