如何在函数中重复参数n次?

时间:2017-01-08 23:19:42

标签: r

我在制作数据集时有时会这样做。我通常可以使用rep,但有时它不适用,我必须找到一个解决方法或编写一个非常长的函数调用。

例如,我需要使用abind函数从相同的2-d矩阵中制作3维数组。如果我想要5份,那不是很优雅,但可能会更糟:

mat <- matrix(c(1,0,0,0,1,0,0,0,1), nrow=3, ncol=3)
abind(mat, mat, mat, mat, mat, along=3)

如果我想要200份副本,有没有比重复参数200次更清洁的解决方案?使用rep连接矩阵,我尝试了其他功能而没有任何运气。如果可以的话,我想避免循环和eval(parse(text=...))

1 个答案:

答案 0 :(得分:3)

?replicate就是你想要的:

replicate(5, mat)
#, , 1
#
#     [,1] [,2] [,3]
#[1,]    1    0    0
#[2,]    0    1    0
#[3,]    0    0    1
#
#  <snip!>
#  
#, , 5
#
#     [,1] [,2] [,3]
#[1,]    1    0    0
#[2,]    0    1    0
#[3,]    0    0    1

...这是replicate(5, mat, simplify="array")的快捷方式。将simplify=参数更改为FALSETRUE,以查看其他可能的输出选项。

如果不同输出需要abind功能(例如,使用along=2),那么你可以一起破解:

do.call(abind, c(rep(list(mat), 5), along=3) )