2016-03-31 10 views
0

değişen boyutlardaki matris Girilmesi, bir diziAşağıdaki sorun, her zaman 4 sütun ancak satır farklı sayıda veri üreten bir fonksiyon <code>ss()</code> sahip sağlar ki R

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 
içine bu çıktısını depolamak istiyorum

sonra bir dizide Bunları bir araya istiyorum:

J<-array(40,4,3) 
for (i in 1:3){ 
J[,,i]<-ss(M[i]) 
} 

Ama ne olur değerler dizisini doldurmak için tekrarlanan 10 satırlarla ilk matris için, ben sonra 0s olmasını istememizdir M'de mevcut veriler doldurulur. Sonra denedim:

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]) 
} 

Ama bu yöntemin o kadar etkili olmadığını hissediyorum, daha iyi bir yolu var mı? uygulamak kullanmak için bazı yolu var mı:

B<-lapply(M, ss) 

ama bu olurdu da bir döngü olmadan nesneyi B oluşturmak için son derece (M 10000 unsurları vardır), yavaş

cevap

1

Tek yoludur:

B <- as.array(lapply(1:3, ss)) 

Tüm matrislerin 40 satıra sahip olmasını zorlamak istiyorsanız, veri olmayan öğeleri sıfırlarla doldururken, ss() numaralı bir sürümü oluşturabilir ve bu da bu satırlarla bir matris döndürür. Aşağıdaki gibi:

ss <- function(x) { 
    m <- matrix(x, nrow = x*10, ncol = 4) 
    rbind(m, matrix(0, nrow = 40 - nrow(m), ncol = 4)) 
}