R でリストのリストを事前に初期化し始めたとき、後で入力する必要があるため、rep() で値として使用した場合のリスト オブジェクトの動作について疑問に思いました。私が次のことをしようとしているとき...
listOfLists <- rep(list(1, 2), 4)
... listOfLists は単一のリストです:
1 2 1 2 1 2 1 2
ただし、最終的に値 1 と 2 をそれぞれ含むリストのリストであると想定します。
1 2
1 2
1 2
1 2
目的の結果を得るには、値のエントリをさらに c() で囲む必要があります。
listOfLists <- rep(list(c(1, 2)), 4)
なぜこれがRの場合なのだろうか.リストは、c()に似た何かをする代わりに、通常のように完全に機能するリストを作成するべきではありませんか? c() で値をグループ化すると、実際にここで問題が解決するのはなぜですか?
ご感想ありがとうございます!
結論: Ben Bolker と Peyton の両方の投稿が最終的な答えです。これは、list() 関数の動作でも c() 関数の動作でもありません。代わりに、rep() はリストとベクトルのエントリを 1 つに結合するようです。値を別のコンテナーで囲むと、rep() は実際には最初のコンテナーを「無視」しますが、2 番目のコンテナーを繰り返します。