将名称(或指示)传递给lapply
允许在函数内访问元素名称(根据给定的解决方案here)。如何应用相同的方法来处理列表列表?
在下面的示例中,每个列表元素(" A"和" B")本身就是一个列表,包含多个命名数据帧(" df_001"等等)上)。
list_of_lists <- list("A" = list("df_001" = data.frame(X = 1, Y = 1), "df_002" = data.frame(X = 1, Y = 2), "df_003" = data.frame(X = 2, Y = 1)),
"B" = list("df_004" = data.frame(X = 1, Y = 1), "df_005" = data.frame(X = 1, Y = 2), "df_006" = data.frame(X = 2, Y = 1)))
我想在每个数据框中应用一个功能,可以粘贴其数据框名称(例如&#34; df_001&#34;)及其父列表名称(例如&#34; A& #34)。例如,为每个数据框生成一个标题相同的标题&#34; A:df_001&#34;或者&#34; B:df_004&#34;等
我可以为每个单独的列表元素(&#34; A&#34;或&#34; B&#34;)执行此操作,如下所示
plot_with_name <- function(z) {
dat <- list_of_lists[["A"]][[z]]
plot(dat[, 1], dat[, 2],
main = paste("A: ", z) )
}
lapply( names(list_of_lists[["A"]]), plot_with_name )
# then repeat, replacing "A" with "B"
但我很好奇是否可以在不需要拆分列表的情况下完成此操作。
我的原型想法是使用嵌套的lapply
调用。下面的尝试将函数应用于所有数据帧,但不调用名称。也许可以修改它(?)
lapply( list_of_lists, lapply, function(x) { plot(x[, 1],x[, 2]) } ) # generates plots WITHOUT names
非常感谢任何帮助。感谢
答案 0 :(得分:1)
与thelatemail anwser类似:
xx=unlist(list_of_lists, recursive=FALSE)
mapply(plot, x = xx, main = names(xx), SIMPLIFY = FALSE)
答案 1 :(得分:0)
不是最优雅的解决方案,但它确实有效:
nms_list <- names(list_of_lists)
for (i in seq_along(nms_list)) {
m <- length(list_of_lists[[nms_list[i]]])
for (l in 1:m) {
dat <- list_of_lists[[nms_list[i]]][[l]]
plot(dat[, 1], dat[, 2],
main = paste(nms_list[i],":", names(list_of_lists[[nms_list[i]]])[l]))
}
}