2

私はしばしばループ内でループを行い、最後にリストをデータフレームに溶かしてグラフ化します。

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: n 個の異なるリストのループを受け入れ、最後に n 個の異なるリスト名を列名として保持する1 つのMelt_map 関数を作成することは可能ですか?

4

1 に答える 1