2011-08-09 19 views
5

Orada parlak beyinler için başka bir sorum var (bu site çok bağımlılık yapıyor).Boş bir matris için for döngüsünün sonuçları atama

Matris üzerinde bazı simülasyonlar yapıyorum ve bu amaçla döngüler için yuva yaptım. İlki, döngü döngüsü her seferinde bir artış gösteren bir vektör oluşturur. Yuvalanmış döngü, vektörü rasgele hale getirerek, matrise ekleyerek ve yeni matris üzerindeki bazı basit özellikleri hesaplayarak simülasyonlar çalıştırıyor. (Örneğin, simülasyonlarda farklılık göstermeyen özellikler kullandım, fakat pratikte simülasyonların rasgele vektörün etkisi hakkında iyi bir fikir edinmesini istiyorum.) İç içe döngü 100 simülasyon çalıştırıyor ve sonuçta sadece Bu simülasyonların sütun araçları.

property<-function(mat){      #where mat is a matrix 
    a=sum(mat) 
    b=sum(colMeans(mat)) 
    c=mean(mat) 
    d=sum(rowMeans(mat)) 
    e=nrow(mat)*ncol(mat) 
    answer=list(a,b,c,d,e) 
    return(answer) 
    } 

x=matrix(c(1,0,1,0, 0,1,1,0, 0,0,0,1, 1,0,0,0, 1,0,0,1), byrow=T, nrow=5, ncol=4) 

obj=matrix(nrow=100,ncol=5,byrow=T)   #create an empty matrix to dump results into 

for(i in 1:ncol(x)){       #nested for loops 
    a=rep(1,times=i)        #repeat 1 for 1:# columns in x 
    b=rep(0,times=(ncol(x)-length(a)))   #have the rest of the vector be 0 
    I.vec=append(a,b)       #append these two for the I vector 
    for (j in 1:100){ 
     I.vec2=sample(I.vec,replace=FALSE)  #randomize I vector 
     temp=rbind(x,I.vec2) 
     prop<-property(temp) 
     obj[[j]]<-prop 
     } 
    write.table(colMeans(obj), 'myfile.csv', quote = FALSE, sep = ',', row.names = FALSE) 
    } 

Ben karşılaşmamdır sorun iç içe döngü sonuçları ile boş nesne matris içinde doldurmak için yapılması gerekenler:

İşte bazı örnek kod. obj çoğunlukla NA'ların bir vektörü olarak biter, bu yüzden sonuçları doğru bir şekilde atamadığım açıktır. Her döngü obj için pervane bir satır eklemek istiyorum ama

obj[j,]<-prop 

çalışırsanız R matrisi üzerinde simgelerin yanlış bir numara olduğunu söylüyor.

Yardımlarınız için çok teşekkür ederim!

DÜZENLEMELER:, yani burada aşağıda cevap yeniden geliştirilmiş kod tamamdır :

property<-function(mat){      #where mat is a matrix 
    a=sum(mat) 
    b=sum(colMeans(mat)) 
    f=mean(mat) 
    d=sum(rowMeans(mat)) 
    e=nrow(mat)*ncol(mat) 
    answer=c(a,b,f,d,e) 
    return(answer) 
    } 

x=matrix(c(1,0,1,0, 0,1,1,0, 0,0,0,1, 1,0,0,0, 1,0,0,1), byrow=T, nrow=5, ncol=4) 

obj<-data.frame(a=0,b=0,f=0,d=0,e=0)   #create an empty dataframe to dump results into 
obj2<-data.frame(a=0,b=0,f=0,d=0,e=0) 

for(i in 1:ncol(x)){       #nested for loops 
    a=rep(1,times=i)        #repeat 1 for 1:# columns in x 
    b=rep(0,times=(ncol(x)-length(a)))   #have the rest of the vector be 0 
    I.vec=append(a,b)       #append these two for the I vector 
    for (j in 1:100){ 
     I.vec2=sample(I.vec,replace=FALSE)  #randomize I vector 
     temp=rbind(x,I.vec2) 
     obj[j,]<-property(temp) 
     } 
    obj2[i,]<-colMeans(obj) 
    write.table(obj2, 'myfile.csv', quote = FALSE, 
    sep = ',', row.names = FALSE, col.names=F, append=T) 
    } 

Bununla birlikte, bu myfile sadece her bir sütunu için (bir dört satır olması gerektiği gibi, hala glitchy x), ancak bazı tekrarlanan ile 10 satır vardır. Herhangi bir fikir?

cevap

3

Sizin property fonksiyon listesini geri dönüyor. Bir data.frame (kavramsal olarak daha mantıklı olan, olarak yapmak yerine bir matris olmak obj tanımlanması, Alternatif

property <- function(mat) 
{ 
    .... 
    c(a, b, c, d, e) # probably a good idea to rename your "c" variable 
} 

: Bir matris içinde sayıları saklamak istiyorsanız, bunu sayısal bir vektör döndürmek olmalıdır her sütun farklı bir miktarı temsil eder).

obj <- data.frame(a=0, b=0, c=0, ...) 
for(i in 1:ncol(x)) 
    .... 
    obj[j, ] <- property(temp) 

Son olarak, write.table için çağrı myfile.csv içeriğini üzerine unutmayın, bu yüzden içerecektir tek çıkış i son yinelemesi için sonucudur.

+0

Fantastik! Bu tavsiyenin tümü için teşekkür ederim. – Laura

+0

"append = T" ekleyerek üzerine yazma problemini düzeltebilirim. obj şimdi düzgün çalışıyor, ancak write.table üretilen dosya hala sadece bir sütun oldu. Bunu, nesnelerin colMeans nesnesiyle ikinci bir boş veri tabanı oluşturarak ve bunu bir csv dosyasına yazarak çözdüm. – Laura

2

Kullanım rbind:

obj <- rbind(obj, prop) 
+1

Tek başına yeterli değil, ama yardım için teşekkürler! – Laura

İlgili konular