我有以下问题,假设我有一个函数ss()
,它产生的数据总是有4列但行数不同,我想把这个输出存储到数组中
ss(M[1]) #matrix with 4 cols and 10 rows
ss(M[2]) #matrix with 4 cols and 20 rows
ss(M[3]) #matrix with 4 cols and 40 rows
然后我想把它们放在一个数组中:
J<-array(40,4,3)
for ( i in 1:3){
J[,,i]<-ss(M[i])
}
但是,对于具有10行的第一个矩阵,重复这些值以填充数组,我希望在M中存在的数据被填充之后具有0。然后我尝试了:
J<-array(40,4,3)
for ( i in 1:3){
dims<-dim(ss(M[i]))
J[1:dims[1],1:dims[2],i]<-ss(M[i])
}
但我觉得这种方法效率不高,有没有更好的方法?有没有办法使用申请:
B<-lapply(M, ss)
但这也非常慢,(M有10000个元素)
答案 0 :(得分:1)
在没有循环的情况下创建对象B
的一种方法是:
B <- as.array(lapply(1:3, ss))
如果你真的想强制所有矩阵有40行,用零填充非数据元素,你可以创建一个ss()
版本,它返回一个包含该行数的矩阵。如:
ss <- function(x) {
m <- matrix(x, nrow = x*10, ncol = 4)
rbind(m, matrix(0, nrow = 40 - nrow(m), ncol = 4))
}