r - 在for.loop中将R中的多个文件作为字符串读取
问题描述
我有一个代码在执行时从一个文件夹中读取两个不同的 csv 文件。我需要在这种情况下使用 for 循环多次执行此操作并将输出写入“bsc_.csv”形式的单独 csv 文件。两个输入 csv 文件的文件格式是“base_.csv”和“fut_.csv”。这些文件是递增编号的,这就是我需要迭代的模式。示例代码附在下面。
library('CDFt')
d1<-read.csv("base1.csv",header=TRUE)
d2<-read.csv("fut1.csv",header=TRUE)
A1<-d1[,2]
A2<-d1[,3]
A3<-d2[,2]
CT<-CDFt(A1,A2,A3)
x<-CT$x
FGp<-CT$FGp
FGf<-CT$FGf
FRp<-CT$FRp
FRf<-CT$FRf
ds<-CT$DS
d<-round(ds,3)
dat<-replace(d,d<0,0)
write.table(dat,"bsc1.csv", row.names=F,na="NA",append=T, quote= FALSE, sep=",", col.names=F)
解决方案
试试这个(未经测试):
bases <- list.files(pattern = "base[0-9]*\\.csv$")
futs <- list.files(pattern = "fut[0-9]*\\.csv$")
mismatches <- setdiff(gsub("^base", "", bases), gsub("^fut", "", futs) )
if (length(mismatches)) {
warning("'bases' files not in 'futs': ", paste(sQuote(mismatches), collapse = ", "))
bases <- setdiff(bases, paste0("base", mismatches))
}
# and the reverse
mismatches <- setdiff(gsub("^fut", "", futs), gsub("^base", "", bases) )
if (length(mismatches)) {
warning("'futs' files not in 'bases': ", paste(sQuote(mismatches), collapse = ", "))
futs <- setdiff(futs, paste0("fut", mismatches))
}
ign <- Map(function(fb, ff) {
bdat <- read.csv(fb, header = TRUE)
fdat <- read.csv(ff, header = TRUE)
# ...
newfn <- gsub("^base", "bsc", fb)
write.table(dat, newfn, ...)
}, bases, futs)
推荐阅读
- python - 如何在 python 中导入这个模块
- yourkit - 在 127.0.0.1 上没有运行应用程序 - 无法在 yourkit 文件夹中找到 dyk.controller.socket.timout 关键字?
- python - 在 AWS Redshift 上安装 h3 python 库以在 UDF 中使用
- python-3.x - 如何将str日期时间转换为日期时间obj
- ios - 通过 Cocoapods 安装后无法导入库
- javascript - JS / ANGULAR:从方法回调中设置类变量值
- php - 使用 laravel 本地化页面标题
- tcp - 如何使用 actix-web HttpResponse 从 tokio TcpStream 发送数据
- java - 尝试使用 jsp 编辑上传的表单详细信息
- sql - 如何在当前日期和当前日期 + 2 之间提取数据但不包括周末?