L'affectation des résultats d'une boucle for pour une matrice vide

J'ai une autre question pour les esprits brillants (ce site est tellement addictif).

Je suis en cours d'exécution des simulations sur une matrice et j'ai des boucles for imbriquées à cette fin. La première crée un vecteur qui augmente d'une unité chaque fois qu'une boucle. La boucle imbriquée est en cours d'exécution des simulations par randomisation du vecteur, en l'attachant à la matrice, et le calcul de certaines propriétés simples sur la nouvelle matrice. (Pour un exemple, j'ai utilisé les propriétés qui ne variera pas dans les simulations, mais dans la pratique, j'ai besoin de la simulation de façon à obtenir une bonne idée de l'impact de la randomisés vecteur.) La boucle imbriquée fonctionne à 100 simulations, et en fin de compte, je veux seulement la colonne moyen de ces simulations.

Voici un exemple de code:

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

Le problème que je rencontre est la manière de remplir le vide de l'objet de la matrice avec les résultats de la boucle imbriquée. obj se termine comme un vecteur de la plupart des NAs, donc il est clair que je ne suis pas assigner les résultats correctement. Je veux que chaque cycle pour ajouter une ligne d'accessoire pour obj, mais si j'essaie

obj[j,]<-prop

R me dit qu'il y a un nombre incorrect d'indices sur la matrice.

Je vous remercie beaucoup pour votre aide!

MODIFICATIONS:
Ok, donc voici le code améliorée re les réponses ci-dessous:

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

Toutefois, il est toujours glitch, comme le myfile ne devrait avoir que quatre lignes (une pour chaque colonne de x), mais en fait a 10 lignes, avec quelques répété. Des idées?

OriginalL'auteur Laura | 2011-08-09