首页 > 解决方案 > 使用 R 循环中变量的 CHIRPS 数据

问题描述

该程序必须根据输入的详细信息下载 CHIRPS 数据,然后将每年的信息分配到变量“nc”中,并将其导出为“.csv”。但是,代码不起作用,我在 RStudio 中收到“R Session Failed Failed Error”消息。

### Importing libraries
library(parallel)
library(sp)
library(raster)
library(heavyRain)

### Working directory
setwd("D:/data-science_hydrology/g8/")

### Download CHIRPS monthly
data_CHIRPS <- getCHIRPS(region = "global",
                         format = "netcdf",
                         tres = "daily",
                         sres = 0.25,
                         begin = as.Date("1981-01-01"),
                         end = as.Date("2020-12-31"),
                         dsn = "data/chirps_daily",
                         overwrite = T,
                         cores = 1)

### THIS CRASH ME RSTUDIO
for (i in 1981:1982){
  nc <- paste("nc", i, sep = "")
  assign(nc, brick(paste("data/chirps_daily/chirps-v2.0.", i, ".days_p25.nc", sep ="")))
}

标签: r

解决方案


首先,你不应该使用assign; 而是将您创建的对象存储在列表中。你通常可以这样做

library(raster)
y <- 1981:1982
ff <- paste0("data/chirps_daily/chirps-v2.0.", y, ".days_p25.nc")
nc <- lapply(ff, brick)
names(nc) <- y

这可能会给出同样的错误,很可能是因为文件损坏。要找出是哪一个,请使用循环查看失败的位置。

nc <- list()
for (i in 1:length(ff)) {
  print(ff[i]); flush.console()
  nc[[i]] <- brick(ff[i])
}

然后重新下载坏文件并重试。


推荐阅读