【发布时间】:2021-08-15 04:01:51
【问题描述】:
我有一个列表 (chla_vals),其中包含两个湖泊的 12 个月度叶绿素值(总共 24 个 chla 值)。需要注意的是,当我使用length()检查这个列表的长度时,结果是12。正因为如此,我才相信这是一个列表的列表。
这里的一些乐于助人的人也有类似的情况,所以我修改了他们的代码,使用以下方法提取第一个湖的 chla 值:
chl_lake1 <- sapply(chla_vals, '[', 1)
虽然这很好用,但我有多个类似于 chla_vals 的列表,其中包含基于用于测量叶绿素-a 的方法略有不同的值,并且将来我会有更多的湖泊。因此,我正在尝试编写一个循环,它将为每个月和每个湖提取这些 chl-a 值并将它们输出到数据框中。
我认为最好的方法是将我的所有列表(例如:chla_vals、chla_vals1、chla_vals2)合并到另一个列表中列表,然后循环遍历它。我是 R 的初学者,所以如果这不是最佳实践,请告知。
到目前为止我的代码:
#Reproducible examples of chla_vals, chla_vals2, and chla_vals3
chla_vals <- list(runif(2))
chla_vals <- rep(chla_vals, 12)
chla_vals2 <- list(runif(2))
chla_vals2 <- rep(chla_vals2, 12)
chla_vals3 <- list(runif(2))
chla_vals3 <- rep(chla_vals3, 12)
#Combining all lists into a larger list, and specifying the list names
chla_comb <- list(chla_vals = chla_vals, chla_vals2 = chla_vals2, chla_vals3 = chla_vals3)
#Storing the names of each list
list_names <- names(chla_comb)
#Creating an empty dataframe to store my values, with 3 columns corresponding to my three original lists
#I know I will need more columns (eg: chlorophyll-a method, month, and lake ID), but I figure I can sort that later
values_df <- setNames(data.frame(matrix(ncol = length(list_names))), list_names)
#The actual loop:
for (i in seq_along(chla_comb)) {
v <- chla_comb[i]
values_df[i] <- lapply(v, '[', 1)
}
这种方法有效,但对于每个 chl-a 方法(chla_vals 、chla_vals1 和 chla_vals2)。我需要每种方法的所有 24 个值,因为我对叶绿素随时间的变化感兴趣
编辑:包括一个可重现的小例子。这是我可以创建的最好的,但列表看起来与我所拥有的不完全一样。我认为解决方案无论哪种方式都行得通。
【问题讨论】:
-
请展示一个可重现的小例子进行测试
标签: r list loops for-loop lapply