0

我希望你能帮助我。我一直在尝试将多个栅格数据集导入 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)

我怎样才能用循环做到这一点?我非常感谢您提出的任何建议!

谢谢!!!米

4

2 回答 2

0

从您的命令中创建一个函数:

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]])
于 2014-07-28T13:42:04.613 回答
-1

你不能在for循环中做吗?

for(i in 1:length(listy)) { 

listy[[i]] <- listy[[i]]
etc
}     

或与 lapply

lapply(listy, function(x) { 
  x[[i]] <- x[[i]]
  etc
  } 
)
于 2013-10-24T20:25:11.697 回答