R l oop для извлечения файлов CSV из FTP - PullRequest
1 голос
/ 09 марта 2020

Я пытаюсь l oop просмотреть все файлы CSV на FTP-сайте и загрузить содержимое CSV с определенным именем файла в базу данных.
До сих пор мне удавалось

  • получить доступ к FTP с помощью ...

    getURL((url, userpwd = userpwd, ftp.use.epsv = FALSE, dirlistonly = TRUE),

  • получить список имен файлов, используя ...

    unlist(strsplit(filenames, "\r\n"),

  • и создайте фрейм данных со списком полных URL-адресов (например, ftp: // sample@ftpserver.name.com/samplename.csv), используя ...

    for (i in seq_along(myfiles)) {
      url_list[i,] <- paste(url, myfiles[i],  sep = '')
       }
    

Как мне провести oop через этот фрейм данных, фильтруя по определенным именам файлов, чтобы создать новый фрейм данных со всеми данными из соответствующих CSV? (половина файлов называется Type1SampleName, а половина - Type2SampleName)

Я бы затем загрузил эти данные в базу данных.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 18 марта 2020

Просто обновление о том, как я закончил это и что сработало для меня в конце ...

mydata <- lapply(urls, getURL, userpwd = userpwd, connecttimeout = 60)

В продолжение сверху ..

while (i <= length(mydata)) {

mydata1 <- paste0(mydata[[i]])

bin <- read.csv(text = mydata1, header = FALSE, skip = 1)

#Column renaming and formatting here
#Uploading to database using RODBC here
}

Спасибо за указатели @Parfait - действительно ценятся. Как и большинство проблем, все выглядит просто после того, как вы это сделали!

0 голосов
/ 11 марта 2020

Поскольку RCurl::getURL возвращает прямой HTTP-ответ, в данном случае содержимое CSV, рассмотрите возможность расширения вызова функции lapply для передачи результата в read.csv с использованием text аргумент:

# VECTOR OF URLs
urls <- paste0(url, myfiles[grep("Type1", myfiles])

# LIST OF DATA FRAMES FROM EACH CSV
mydata <- lapply(urls, function(url) {
     resp <- getURL(url, userpwd = userpwd, connecttimeout = 60)
     read.csv(text = resp)
})

В качестве альтернативы getURL поддерживает функцию обратного вызова с аргументом write :

В качестве альтернативы, если задано значение для параметра write, это возвращается Это позволяет вызывающей стороне создать обработчик в вызове и вернуть его обратно. Это избавляет от необходимости явно создавать и назначать его, а затем вызывать getURL и затем обращаться к результату. Вместо этого 3 шага могут быть встроены в один вызов.

# USER DEFINED METHOD
import_csv <- function(resp) read.csv(text = resp)

# LONG FORM NOTATION
mydata <- lapply(urls, function(url)
      getURL(url, userpwd = userpwd, connecttimeout = 60, write = import_csv)
)

# SHORT FORM NOTATION
mydata <- lapply(urls, getURL, userpwd = userpwd, connecttimeout = 60, write = import_csv)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...