R将名称分配给矩阵中的列表

R assigning names to lists in matrix

我正在针对 Ly 的每个值通过 Lx 的每个参数值迭代一个函数。该函数生成一个列表,然后将列表放入矩阵中。我正在尝试为结果列表命名,以便我知道函数的每个 运行 使用了哪些参数组合(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))

但是,这似乎只命名了矩阵的前两行。我怎样才能恰当地命名每个列表?

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