我可以手工制作这份清单:
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
方法,因为它可以更轻松地扩展到两个以上的参数;注释中显示的使用mapply
使上面的两个示例看起来相当紧凑和可读:
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
Sebastian 的回答中所示的调用。