Я часто делаю петли внутри циклов, а затем в конце тает списки в графику для графического отображения., назвав расплавленные итеративно отображенные списки в tidyverse
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-разные имена списков в качестве имен столбцов?