我经常在循环内部进行循环,然后最后将列表融合到数据框以进行绘图。
ac<-list("BB","AA")
ca<-list(a=c(1,2,3),b=c(6,5,4))
cc<-map(a,function(y) map(ca,~paste0(.x,y)))
reshape2::melt(cc)
Q1:有没有另一种方法在地图内部做地图而不求助于function(y)
但是,由于我的列表通常未命名,因此我倾向于将列表的值添加为名称,如下所示:
map_test<-function(list_in,...){
if (is.null(names(list_in))){
names(list_in)<-list_in
}
map(list_in,...)
}
cc2=map_test(ac,function(y) map_test(ca,~paste0(.x,y)))
df=reshape2::melt(cc2)
生成的 df 具有名称 L2 和 L1,如果名称分别为 ca 和 ac,我更喜欢。
nam.cons<-NULL
map_test2<-function(list_in,...){
nam.cons<<-c(nam.cons,deparse(substitute(list_in)))
if (is.null(names(list_in))){
names(list_in)<-list_in
}
map(list_in,...)
}
cc3=map_test2(ac,function(y) map_test2(ca,~paste0(.x,y)))
cc4<-reshape2::melt(cc3)
names(cc4)<-c("value",rev(unique(nam.cons)))
nam.cons
现在,如果我忘记重置变量,这会很快变得混乱。我可以在单独的函数中创建 1,2,3,4..n 版本,但是
Q2:是否有可能创建一个melt_map 函数,它既允许接受循环遍历n 个不同的列表,并且最终也将n 个不同的列表名称保留为列名?