【问题标题】:I'm trying to skip over errors and warnings in this for loop in r but its not working?我试图跳过 r 中的这个 for 循环中的错误和警告,但它不起作用?
【发布时间】:2023-03-25 04:35:01
【问题描述】:

我正在尝试将 csv 文件及其名称作为日期读取到 for 循环中,然后在该文件实际存在时从该文件中打印出几列数据。我需要跳过我没有任何数据的日期和实际不存在的日期。当我输入我的代码时,没有输出,它只是空白。为什么我的代码不起作用?

options(width=10000)

options(warn=2)

for(a in 3:5){
for(b in 0:1){
for(c in 0:9){
for(d in 0:3){
for(e in 0:9){

mydata=try(read.csv(paste("201",a,b,c,d,e,".csv",sep="")), silent=TRUE)

if(class(mydata)=="try-error"){next}

else{

    mydata$Data <- do.call(paste, c(mydata[c("LAST_UPDATE_DT","px_last")], sep=""))
    print(t(mydata[,c('X','Data')]))
}

}}}}}

【问题讨论】:

  • 如果你有兴趣使用data.table(确保使用1.8.9),那么:rbindlist(lapply(files, fread))应该这样做。而且速度极快。
  • 安装包:install.packages("data.table", repos="http://R-Forge.R-project.org", type="source")

标签: r for-loop error-handling


【解决方案1】:

这是读取所有文件的一种非常糟糕的方式。试试这个:

f <- list.files(pattern="*.csv")
mydata <- sapply(f, read.csv, simplify=FALSE)

这将返回一个数据帧列表mydata,每个数据帧都是对应文件的内容。

或者,如果您不想读取其他 csv 文件,则可以限制规范:

f <- list.files(pattern="201\\d{5}\\.csv")

并将所有内容组合成一个大数据框:

do.call(rbind, mydata)

【讨论】:

  • 谢谢。你知道如何将数据框合二为一吗?
  • 你会如何选择特定的列来组合?
猜你喜欢
  • 2023-03-08
  • 2021-09-27
  • 1970-01-01
  • 2013-01-22
  • 1970-01-01
  • 2017-10-13
  • 2021-04-26
  • 2020-09-12
  • 2016-01-18
相关资源
最近更新 更多