объединить результаты цикла в один файл в R (некоторые результаты отсутствовали) - PullRequest
0 голосов
/ 23 марта 2012

Я хочу объединить результаты цикла for в 1 текстовый файл, и я написал свой код на основе предложения по этой ссылке
объединить результаты цикла в одном файле

Есть одна проблема.Я должен получить 8 результатов (строка), но я только закончил только 5. Каким-то образом другие результаты не попали в файл.Я думаю, что проблема с оператором if, но я не знаю, как это исправить.

Вот мой код

prob <- c(0.10, 0.20)
for (j in seq(prob)) {
  range <- c(2,3)
  for (i in seq(range)) {
    sample <- c(10,20)
    for (k in seq(sample)) {
      data <-  Simulation(X =1,Y =range[i], Z=sample[k] ,p = prob[j])
      filename <-  paste('file',i,'txt')
      if (j == 1) {
        write.table(data, "Desktop/file2.txt", col.names= TRUE) 
      } else {
        write.table(data,"Desktop/file2.txt", append = TRUE, col.names = FALSE)
      }
    }
  }
}

1 Ответ

2 голосов
/ 23 марта 2012

Это связано с тем, что бит if ( j == 1 ) предназначен для проверки того, что вы впервые записали файл или нет.

Если равен в первый раз, тоон будет записывать имена столбцов (то есть X, Y, Z, p) в файл (см. col.names=TRUE?).

Если это не в первый раз, тогда он не будет записывать имена столбцов, а просто добавит данные.

Поскольку у вас есть несколько вложенных циклов, это условие не будет работать, поэтомухорошо для вас: когда j==1 (то есть для prob=0.1) вы выполняете 4 других цикла внутри.Но начиная с j==1, данные каждый раз перезаписываются.

Я бы порекомендовал инициализировать переменную count, которая подсчитывает, сколько раз вы выполнили Simulation, а затем изменить эту строку на if ( count == 1 ):

count <- 1
prob <- c(0.10,0.20)
# .... code as before
    data <-   Simulation(X =1,Y =range[i], Z=sample[k] ,p = prob[j])
    if ( count == 1 ) {
        write.table(data, "Desktop/file2.txt", col.names=T)
    } else {
        write.table(data, "Desktop/file2.txt", append=T, col.names=F)
    }
# increment count
count <- count + 1 
}}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...