將名稱(或標記)傳遞給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)))
我想申請,每個這些dataframes的,它可以粘貼它的兩個數據幀名稱(例如「df_001」)和它的父列表名稱(例如,「A」)的功能。例如,爲每個數據幀生成一個標題爲「A:df_001」或「B:df_004」的繪圖等
我可以爲每個單獨列表元素(「A」或「B」)執行此操作,如下所示
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
任何幫助,非常感謝。由於
這是一個有點的變通,但如何:'UL < - unlist(list_of_lists,rec = FALSE); Map(函數(d,n)plot(d [,1],d [,2],main = n),ul,names(ul))'? – thelatemail
另一種解決方法:'library(data.table);庫(GGPLOT2); ggplot(熔化(list_of_lists),aes(x =變量,y =值))+ geom_boxplot()+ facet_wrap(〜交互(L1,L2))' – Henrik
謝謝大家的建議。我選擇了@ Chirayu's作爲解決方案,儘管我非常欣賞這與'Map()'建議相當 – pyg