このリストを手動で作成できます。
list( list(n=1) , list(n=2), list(n=3) )
しかし、たとえば、n を 10 まで上げたい場合、これを自動化するにはどうすればよいでしょうか。as.list(1:10) を試してみましたが、これはまずデータ構造の型が異なり、次に n の指定方法がわかりませんでした。
答えが複数の要素リストに拡張できることを願っています。たとえば、1:3 と c('A','B') のすべての組み合わせです。
list( list(n=1,z='A') , list(n=2,z='A'), list(n=3,z='A'),
list(n=1,z='B') , list(n=2,z='B'), list(n=3,z='B') )
背景: 次のように使用します。lapply( outer_list, function(params) do.call(FUN,params) )
更新: どの回答にチェックマークを付けるかを選択するのは困難でした。expand.grid
2つ以上のパラメーターに簡単にスケーリングできるため、このアプローチを採用しました。mapply
コメントに示されているように を使用すると、上記の 2 つの例が適度にコンパクトで読みやすくなります。
outer_list=with( expand.grid(n=1:10,stringsAsFactors=F),
mapply(list, n=n, SIMPLIFY=F)
)
outer_list=with( expand.grid(n=1:3,z=c('A','Z'), stringsAsFactors=F),
mapply(list, n=n, z=z, SIMPLIFY=F)
)
呼び出しでパラメーター名を繰り返すことにより、DRY の原則に違反しているmapply()
ため、少し気になります。ですから、気になるときはalply
、セバスチャンの回答に示されているように呼び出しを使用します。