Ошибка в соединении файлов при создании цикла для чтения нескольких файлов CSV в одном каталоге - PullRequest
0 голосов
/ 30 мая 2018

Итак, я создаю цикл в R, который читает несколько CSV-файлов в каталоге с именем «specdata», а затем сообщает вам среднее значение определенного столбца общего в этих файлах.Эта функция представлена ​​в следующем параграфе. Аргументы, которые вы указываете: каталог, в котором находятся эти файлы, столбец, который вы хотите вычислить, и последовательность идентификаторов, которая сообщает вам, сколько файлов вы хотите прочитать в зависимости от объекта.число, представленное через подмножество []

ЗДЕСЬ ФУНКЦИЯ:

pollutantmean <- function(directory,pollutant,id) {
     for (i in id) {archivo <- list.files(directory)[i]
    file(archivo[i])
    datapollution <- read.csv(archivo[i],header = TRUE)
    datamatrix <- data.matrix(datapollution)
    mean(datamatrix[pollutant],na.rm = TRUE)}}

проблема в том, что при вызове функции:

pollutantmean("specdata",sulfurate,1:15)

выдает следующую ошибкусообщение:

 Error in file(file, "rt") : cannot open the connection
In addition: Warning message:
In file(file, "rt") :
 Show Traceback

 Rerun with Debug
 Error in file(file, "rt") : cannot open the connection

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

file(list.files("specdata")[2])

в этом случае он дает желаемое соединение, позже, когда вы применяете read.csv ("specdata") [2], он также отлично работает.

Итак, вот мой вопрос, что я пропустил?Он должен собирать и читать все файлы так же, как это происходит при включении поднабора [2], но заменяя число 2 соответствующим i, повторяя функцию и делая меня счастливым.Почему это дает ошибку здесь, а не при выполнении поднабора на 2?

Я где-то читал, что мне нужно использовать Rbind, но в любом случае это произойдет после генерации соединения и чтения перечисленных файлов,Мне нужно решить это первое предупреждающее сообщение до этого (не знаю, как бы я это сделал потом ...).

Да, я из Coursera, извините за клише, но я действительно хороший парень, ПОЖАЛУЙСТА, ПОМОГИТЕ:)

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

так что это сработало, просто добавив full.names = TRUE, исключив функцию files и отметив i в подмножестве list.files, удалось решить эту проблему.

  function(directory,pollutant,id) {
  for (i in id) {archivo  <-  list.files(directory,full.names = TRUE)
  datapollution <- read.csv(archivo[i],header = TRUE)
  datamatrix <- data.matrix(datapollution)
  resultmean <- mean(datamatrix[pollutant],na.rm = TRUE)}
  print(resultmean)}

Я хотел бы понять, хотя:

Что на самом деле делает аргумент full.names = TRUE в функции list.files?

Почему нет файла () функция нужна?это соединение генерируется автоматически с помощью list.files ()?

0 голосов
/ 30 мая 2018
files <- list.files(directory, full.names = TRUE, pattern = ".csv") # be sure your working directoy contains this data

pollutantmean <- function(directory, pollutant, id) {
  for (i in id) {
    datapollution <- read.csv(files[i], header = TRUE, stringsAsFactors = FALSE)
    datamatrix <- data.matrix(datapollution)
    mean(datamatrix[pollutant],na.rm = TRUE)}
}


pollutantmean("specdata",sulfurate,1:15)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...