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

时间:2017-12-07 00:49:04

标签: r sapply mapply

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

但是,这似乎只是命名矩阵的前两行。如何恰当地命名每个列表?

1 个答案:

答案 0 :(得分: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
相关问题