【问题标题】:import multiple files R导入多个文件 R
【发布时间】:2013-10-24 19:48:11
【问题描述】:

我希望你能帮助我。我一直在尝试将多个栅格数据集导入 R,重新编码每个导入的栅格数据的缺失值,将它们链接到邮政编码,然后将每个栅格数据导出为具有不同名称的 csv 文件。 我正在尝试使用循环,但到目前为止我只有错误。这是据我所知(不要笑):

导入所有 24 个栅格数据集

file_names=as.list(dir(pattern="home.*"))
listy<-lapply(file_names,raster, band=1)
names(listy) <- paste0("hour", seq_along(0:23))

所以现在我将所有栅格数据集放在一个列表 (listy) 中,我只需要对每个数据集运行以下命令:

listy 元素 1 的示例

listy$hour1_r<-listy$hour1
listy$hour1_r[listy$hour1_r==9999]<-NA
y <- extract(listy$hour1_r, zipcoords)
hour1_zipcode <- cbind(zipid,y)
write.table(hour1_zipcode,file="home\\hour1.csv",sep=",",row.names=F)

如何使用循环来做到这一点? 非常感谢您提出的任何建议!

谢谢!!! 米

【问题讨论】:

    标签: r csv raster


    【解决方案1】:

    用你的命令创建一个函数:

    f <- function(listy,filename) {
      listy$hour1_r<-listy$hour1
      listy$hour1_r[listy$hour1_r==9999]<-NA
      y <- extract(listy$hour1_r, zipcoords)
      hour1_zipcode <- cbind(zipid,y)
      write.table(hour1_zipcode,file=filename,sep=",",row.names=F)
    }
    

    在所有元素上运行您的命令:

    mapply(f, listy, filename= paste0("home\\hour",seq_along(listy),".csv"))
    

    请注意,您实际上并不希望 mapply 返回任何内容,因此您可以将其包装为不可见:

    invisible(mapply(f, listy, filename= paste0("home\\hour",seq_along(listy),".csv")))
    

    您也可以在 for 循环中执行此操作:

    filenames = paste0("home\\hour",seq_along(list),".csv")
    for (i in seq_along(listy)) f(listy[[i]],filenames[[i]])
    

    【讨论】:

      【解决方案2】:

      你不能在 for 循环中做吗?

      for(i in 1:length(listy)) { 
      
      listy[[i]] <- listy[[i]]
      etc
      }     
      

      或使用 lapply

      lapply(listy, function(x) { 
        x[[i]] <- x[[i]]
        etc
        } 
      )
      

      【讨论】:

      • 请注意,for 循环不正确,lapply 也不正确。
      猜你喜欢
      • 2018-11-22
      • 1970-01-01
      • 2012-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-16
      • 1970-01-01
      • 2014-07-20
      相关资源
      最近更新 更多