1. ホーム
  2. r

lapply関数におけるリスト名へのアクセスと保存

2023-10-25 01:57:33

質問

lapply関数内でリストの名前にアクセスする必要があります。私はそれが私の関数で各リスト要素名をフェッチできるように、リストの名前を介して反復処理する必要があると言われているいくつかのスレッドをオンラインで見つけました。

> n = names(mylist)
> mynewlist = lapply(n, function(nameindex, mylist) { return(mylist[[nameindex]]) }, mylist)
> names(mynewlist)
NULL
> names(mynewlist) = n

問題は、mynewlist が元の mylist のインデックスを失うことで、それらを復元するために last names() の割り当てを追加する必要があります。

lapply関数によって返された各要素に明示的なインデックス名を与える方法はありますか?または、mynewlist 要素に正しいインデックス名が設定されていることを確認する別の方法はありますか? lapplyがリストの要素をmylistと同じ順序で返さない場合、mynewlistのインデックス名が間違っている可能性があると感じています。

どのように解決するのですか?

私は、次のように考えています。 lapply は、デフォルトでは反復処理するものの名前属性を保持します。の名前を保存する場合 myList の中に n であるため、そのベクトルにはもはや "names"がありません。ですから、もしあなたがそれを再びvia.で追加すれば

names(n) <- names(myList)

を使用し lapply を使用すると、期待通りの結果が得られるはずです。

編集

今朝はちょっと頭がぼんやりしています。もう一つの、おそらくより便利な選択肢を紹介します。

sapply(n,FUN = ...,simplify = FALSE,USE.NAMES = TRUE)

と戸惑いながらも、手探りで lapply がないことに戸惑い USE.NAMES の引数がなく、実際にコードを見てみると sapply のコードを実際に見て、自分が愚かであることに気づき、これはおそらくより良い方法であると思いました。