我有一个要导入,执行计算并保存结果的文件列表。
我有几个文件夹,标签如下:
2005
,2006
,2007
... 2018
。
文件另存为:
file_2005.csv
,file_2006.csv
,file_2007.csv
... file_2018.csv
。
(每个文件夹一个文件)
我正在尝试编写将执行以下操作的函数:
file_2005.csv
和file_2006.csv
中读入2005
和2006
。-从文件夹file_2006.csv
和file_2007.csv
中读入2006
,现在读入2007
。
-执行与之前相同的计算。
-保存结果。
---从文件夹file_2007.csv
和file_2008.csv
中读取2007
和2008
。
---执行相同的计算
---保存结果。
等...
所以我想知道如何递归创建这样的函数,该函数实质上读取所有数据并处理结果。
这些年来,我在一起阅读时都会遇到记忆问题。
答案 0 :(得分:0)
列出文件
LF <- list.files(path="Years",pattern=".csv",full.names=T,recursive=T)
创建一个包含两列的data.frame-1的年份减去最后一年的年份,另一列的所有年份都减去第一行的
data <- data.frame(V1=LF[-c(length(LF))])
data$V2 <- LF[-c(1)]
然后按行划分为数据帧列表
li <- split(data, seq(nrow(data)))
然后读入每行中的两个文件(即,第1列中的一年,第2列中的下一年)。使用lapply进行此操作,您还可以在其中应用函数f(x)
并编写csv输出。使用sprintf
自定义文件名
RF <- lapply(li, function(x) {
dat1 <- read.csv(as.character(x$V1))
dat2 <- read.csv(as.character(x$V2))
ndat1 <- f(dat1)
ndat2 <- f(dat2)
write.csv (ndat1, sprintf("new_%s",x$V1))
write.csv (ndat2, sprintf("new_%s",x$V2))
})