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
我正在针对 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