我在制作数据集时有时会这样做。我通常可以使用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=...))
。
答案 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=
参数更改为FALSE
或TRUE
,以查看其他可能的输出选项。
如果不同输出需要abind
功能(例如,使用along=2
),那么你可以一起破解:
do.call(abind, c(rep(list(mat), 5), along=3) )