печать объектов из двойного цикла в R - PullRequest
2 голосов
/ 26 июля 2011

У меня есть код для вложенных циклов здесь. Вывод, который я хотел бы получить, представляет собой матрицу средних значений столбцов матрицы, создаваемой вложенным циклом. Таким образом, внутренний цикл должен выполнить 1000 имитаций случайного вектора и запускать функцию каждый раз. Это прекрасно работает само по себе и распределяет вывод в R. Но я хочу сохранить вывод из вложенного цикла в объект (матрица из 1000 строк и 11 столбцов), а затем распечатать только colMeans этой матрицы, чтобы исполняться внешним циклом.

Я думаю, что проблема заключается в шаге, где я присваиваю результаты внутреннего цикла матрице obj. Я пробовал все варианты obj [i,], obj [i], obj [[i]] и т. Д., Но безуспешно. R говорит мне, что это объект только одного измерения.

x=ACexp

obj=matrix(nrow=1000,ncol=11,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    
  Inv=append(a,b)                              #append these two for the Inv vector    
  for (i in 1:1000){                         #run this vector through the simulations    
      Inv2=sample(Inv,replace=FALSE)           #randomize interactions    
      temp2=rbind(x,Inv2)    
      obj[i]<-property(temp2)                   #print results to obj matrix     
  }    
print.table(colMeans(obj))                   #get colMeans and print to excel file    
}

Есть идеи, как это можно исправить?

Ответы [ 2 ]

1 голос
/ 26 июля 2011

Вы постоянно печатаете всю матрицу на экране по мере ее изменения, но ваш комментарий говорит: «печать в файл Excel».Я предполагаю, что вы действительно хотите сохранить свои данные в файл.Удалите команду print.table все вместе, и после завершения ваших циклов используйте write.table ()

write.table(colMeans(obj), 'myNewMatrixFile.csv', quote = FALSE, sep = ',', row.names = FALSE)

(мои предпочтительные параметры ... см.? Write.table, чтобы выбрать те, которые вам нравятся)

0 голосов
/ 26 июля 2011

Поскольку ваш код не воспроизводим, мы не можем точно сказать, что вы хотите.Однако я предполагаю, что свойство возвращает единственное число, которое вы хотите поместить в правую строку / столбец матрицы obj, которую вы бы назвали obj[row,col].Но у вас будут проблемы с этим как есть, потому что оба ваших цикла используют один и тот же индекс i.Может быть, что-то вроде этого будет работать для вас.

obj <- matrix(nrow=1000,ncol=11,byrow=T)       #create an empty matrix to dump results into
for(i in 1:ncol(x)){                           #nested for loops    
  Inv <- rep(c(1,0), times=c(i, ncol(x)-i))    #repeat 1 for 1:# columns in x, then 0's   
  for (j in 1:nrow(obj)){                      #run this vector through the simulations    
      Inv2 <- sample(Inv,replace=FALSE)        #randomize interactions    
      temp2 <- rbind(x,Inv2)    
      obj[j,i] <- property(temp2)              #save results in obj matrix     
  }    
}
write.csv(colMeans(obj), 'myFile.csv')         #get colMeans and print to csv file   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...