【问题标题】:R assigning names to lists in matrixR为矩阵中的列表分配名称
【发布时间】:2017-12-07 00:49:04
【问题描述】:

我正在通过 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))

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

【问题讨论】:

    标签: r sapply mapply


    【解决方案1】:

    您可以使用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
    

    【讨论】:

    • 是的!有用。我不知道unlist 中的recursive
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多