Я пытаюсь написать функцию, которая будет читать определенные файлы данных.
У меня есть что-то вроде следующего:
files <- list.files("folder/destinationfolder", recursive = TRUE, pattern = ".csv")
files <- file.path("C:/", "folder", files)
Что дает мне что-то вроде следующего:
"C:/folder/folder/destinationfolder/2005/file_2005.csv"
"C:/folder/folder/destinationfolder/2006/file_2006.csv"
"C:/folder/folder/destinationfolder/2007/file_2007.csv"
"C:/folder/folder/destinationfolder/2008/file_2008.csv"
"C:/folder/folder/destinationfolder/2009/file_2009.csv"
Далее я могу прочитать эти файлы, выполнив следующее:
readdata <- function(fn){
dt_temp <- fread(fn, sep=",")
return(dt_temp)
}
mylist <- lapply(files, readdata)
df <- plyr::ldply(mylist, data.frame)
Однако я не заинтересован в загрузке всех файлов одновременно (позже у меня возникают проблемы с памятью). То, что я пытаюсь сделать, это прочитать год во время t
и год во время t-1
.
У меня есть следующая функция, которая собирает years
из путей к файлам.
extract_years <- function(ex_years){
foo <- gsub("\\..*","",ex_years)
str_sub(foo, start= -4)
}
years_to_process <- extract_years(files)
Что дает этот вывод:
"2005" "2006" "2007" "2008" "2009"
Итак, я хотел бы прочитать в 2006
, а также 2005
, обработать мои данные и затем прочитать в 2007
, а затем 2006
и обработать эти данные и т. Д.
EDIT:
Я думаю, что мне нужно в readdata
добавить строку, которая будет grep
years
из пути к файлу "C:/folder/folder/destinationfolder/2009/file_2009.csv"
и заменить ее на year
в функции и year - 1
. Так что в readdata
функция может выглядеть так:
readdata <- function(fn){
# Grep the file path and replace the year with the year in the funciton
# Grep the file path again and replace the year with `t-1`
dt_temp <- fread(fn, sep=",") # read in these two data files
return(dt_temp)
}
РЕДАКТИРОВАТЬ 2: Это так близко, как я получил, который не работает ...
fucn <- function(years){
file1 = str_replace_all(files, years, years)
file2 = str_replace_all(files, years, as.character(as.numeric(years) + 1))
return(file1, file2)
dt_temp1 <- fread(file1, sep = ",")
dt_temp2 <- fread(file2, sep = ",")
return(dt_temp)
}
mylist <- lapply(years_to_process, fucn)
выдает эту ошибку:
Ошибка при возврате (файл1, файл2): возвращение с несколькими аргументами не
разрешено