lapply関数でリスト名にアクセスして保存する 質問する

lapply関数でリスト名にアクセスして保存する 質問する

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 のインデックス名が間違っている可能性があると思います。

ベストアンサー1

lapplyデフォルトでは、反復処理しているものの名​​前属性が保持されると思います。 の名前をmyListに格納するとn、そのベクトルには「名前」がなくなります。そのため、 を介して に戻すと、

names(n) <- names(myList)

以前と同じように使用すればlapply、望みどおりの結果が得られる可能性があります。

編集

今朝は頭が少しぼんやりしています。別の、おそらくもっと便利なオプションがあります。

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

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

おすすめ記事