R Временно записать CSV-файлы во время цикла в R - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть цикл, который загружает данные из URL. Теперь я хотел бы, чтобы для каждых x итераций информация до сих пор записывалась.

Таким образом, у меня есть следующий код:

    baseurl <- "http://zoeken.kvk.nl/Address.ashx?site=handelsregister&partialfields=&q=010"
    pages3 <- list()

for(i in 1:99999){


if(i < 10){
    mydata <- RJSONIO::fromJSON(paste0(baseurl,"00000",i), flatten=TRUE)
  }
  if(i < 100 & i >= 10){
    mydata <- RJSONIO::fromJSON(paste0(baseurl,"0000",i), flatten=TRUE)
  }
  if(i < 1000 & i >= 100){
    mydata <- RJSONIO::fromJSON(paste0(baseurl,"000",i), flatten=TRUE) 
  }

  if(i < 10000 & i >= 1000){
    mydata <- RJSONIO::fromJSON(paste0(baseurl,"00",i), flatten=TRUE)
  }  
  if(i < 100000 & i >= 10000){
    mydata <- RJSONIO::fromJSON(paste0(baseurl,"0",i), flatten=TRUE) 
  }
  if(i < 1000000 & i >= 100000){
    mydata <- RJSONIO::fromJSON(paste0(baseurl,i), flatten=TRUE) 
  }




    mydata <- RJSONIO::fromJSON(paste0(baseurl,i), flatten=TRUE) 

    pages3[[i]] <- mydata$resultatenHR
    options(timeout = 4000000)
    if(i %% 100 == 0){Sys.sleep(5)}
    if(i %% 1000 == 0){
      final_df<-do.call(rbind,pages3)
      final<- Reduce(function(x,y) merge(x, y, all=TRUE), final_df)
      mytime <- format(Sys.time(), "%b_%d_%H_%M_%S_%Y")
      myfile <- file.path(R(), paste0(mytime, "_", i, ".csv"))
      write.csv2(final, file = myfile, sep = "", row.names = FALSE, col.names = FALSE,
                 quote = FALSE, append = FALSE)
      }
  }

  }
}

Тем не менее, ничего не сохраняется в то же время? Где я ошибся с кодом? Спасибо за ваши идеи.

1 Ответ

0 голосов
/ 26 апреля 2018

Я думаю, что ваша проблема, вероятно, в:

myfile <- file.path(R(), paste0(mytime, "_", i, ".csv"))

Поскольку R считает R() функцией.

Error in R() : could not find function "R"

Вы можете изменить его на getwd(), если хотите (не забудьте сначала указать рабочий каталог setwd()) или указать другой путь.

Кроме того, здесь: write.csv2(final, file = myfile, sep = "", row.names = FALSE, col.names = FALSE, quote = FALSE, append = FALSE), вы забыли написать paste(), и, для убеждения, вы можете удалить используемые по умолчанию аргументы.

write.csv2(final, file = paste(myfile, sep = "" ))

# Edit

Это, вероятно, не самый эффективный способно это, вероятно, сделает свое дело.Основная проблема заключается в том, что вы добавляете объект list3 / файл csv к индексу URL.Если вы создадите новый индекс для pages3, вы можете переустанавливать его каждый раз.

setwd("Your working directory path")

baseurl <- "http://zoeken.kvk.nl/Address.ashx?site=handelsregister&partialfields=&q=010"
pages3 <- list()

#Counter for the url loop
i <- 1
#Counter for the appended csv file/ list object pages3
k <- 1

for(i in 1:99999){

  #Read JSON file by i index
  mydata <- RJSONIO::fromJSON(paste0(baseurl,i), flatten=TRUE) 

  #Appending to the Pages3 list object by k index
  pages3[[k]] <- mydata$resultatenHR
  # Increasing the k counter 
  k <- k + 1

  options(timeout = 4000000)
  if(i %% 100 == 0) {Sys.sleep(5)}
  if(i %% 1000 == 0) {
    final_df <- do.call(rbind, pages3)
    final <- Reduce(function(x,y) merge(x, y, all=TRUE), final_df)
    mytime <- format(Sys.time(), "%b_%d_%H_%M_%S_%Y")
    myfile <- file.path(getwd(), paste0(mytime, "_", i, ".csv"))
    write.csv2(final, file = paste(myfile, sep = "" ))
    #Resetting the pages3 list object
    pages3 <- NULL
    #Resting the k index counter
    k <- 1
  }

}  

Однако, в зависимости от вашего компьютера / размера файлов, которые вы пытаетесь импортировать, возможно, будет более эффективно сохранять и разбивать на различные файлы CSV, когда вы закончите импортировать все URL-адреса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...