запись файлов в петлях R - PullRequest
1 голос
/ 15 января 2020

Я пытаюсь записать файл в al oop в R. Я хочу добавить файл, как мы go через l oop. Я попытался добавить = true, но не сработало. Я объяснил проблему с деталями здесь. Есть идеи? спасибо за помощь:

#Initilaizing 2*2 array
Array1 <- array(0,c(2,2))

for(i in 1:5)
{
#Create 4 random numbers  
Random1 <- runif(1, min=0, max=1)
Random2 <- runif(1, min=0, max=1)
Random3 <- runif(1, min=0, max=1)
Random4 <- runif(1, min=0, max=1)

#Assign Random numbers to the array
Array1[1,1] <- Random1
Array1[1,2] <- Random2
Array1[2,1] <- Random3
Array1[2,2] <- Random4

#*****This is the Question*******
# I want to keep the history for Array1 through the 5 loops by writing the array in a file.
# and appending the file as we go through the loop
# I tried write.csv with Append=true but didn't work
# How can I do this?

}

1 Ответ

1 голос
/ 15 января 2020

write.table() работает лучше здесь, поскольку write.csv() является более строгим, чтобы обеспечить постоянную запись допустимых файлов CSV.

write.table() с append = TRUE и col.names = FALSE (для подавления имена столбцов, записываемые в файл несколько раз), должны помочь. Если вы хотите, чтобы разделитель был запятой, чтобы соответствовать спецификации csv, вы можете установить его в sep = ",".

Вот как это может выглядеть:

Array1 <- array(0,c(2,2))

for(i in 1:5)
{
  #Create 4 random numbers  
  Random1 <- runif(1, min=0, max=1)
  Random2 <- runif(1, min=0, max=1)
  Random3 <- runif(1, min=0, max=1)
  Random4 <- runif(1, min=0, max=1)

  #Assign Random numbers to the array
  Array1[1,1] <- Random1
  Array1[1,2] <- Random2
  Array1[2,1] <- Random3
  Array1[2,2] <- Random4

  write.table(Array1,
              sep = ",",
              file = "OUT1.csv", 
              append = TRUE,
              col.names = FALSE,
              row.names = FALSE)
}

Если вы хотите избежать использования write.table (), почему бы не связать массивы в R, а затем записать все одновременно:

out_array <- array(numeric(), c(0,2))
for(i in 1:5)
{
  Array1 <- array(dim = c(2,2))
  #Create 4 random numbers  
  Random1 <- runif(1, min=0, max=1)
  Random2 <- runif(1, min=0, max=1)
  Random3 <- runif(1, min=0, max=1)
  Random4 <- runif(1, min=0, max=1)

  #Assign Random numbers to the array
  Array1[1,1] <- Random1
  Array1[1,2] <- Random2
  Array1[2,1] <- Random3
  Array1[2,2] <- Random4

  out_array <- rbind(out_array, Array1)
}

write.csv(out_array, "OUT2.csv")

И, наконец, для энтузиастов функционального программирования - решение, которое делает все в одной цепочке труб и с картой мурлыкания:

library(dplyr)
library(purrr)
map(1:5, function(repeats) {
    Array1 <- array(dim = c(2,2))
    #Create 4 random numbers  
    Random1 <- runif(1, min=0, max=1)
    Random2 <- runif(1, min=0, max=1)
    Random3 <- runif(1, min=0, max=1)
    Random4 <- runif(1, min=0, max=1)

    #Assign Random numbers to the array
    Array1[1,1] <- Random1
    Array1[1,2] <- Random2
    Array1[2,1] <- Random3
    Array1[2,2] <- Random4
    Array1
}) %>% 
  {do.call(rbind, .)} %>% 
  write.csv("OUT3.csv")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...