从 R 中的多个 PRISM 栅格之一中提取日期值

Extracting values from one of multiple PRISM rasters in R for date

我尝试按照 [ 中的代码进行操作,但 运行 出现了多个错误。我也在尝试额外的每日降水量而不是每月温度。

dates <-  seq(as.Date("2019-01-01"),as.Date("2019-12-31"), by="days")

library(prism)

for (d in unique(dates)) {
  dir.create(d, FALSE)
  options(prism.path = d)
  get_prism_dailys(type = "ppt", dates = d) 
}

#Error in dir.create(d, FALSE) : invalid 'path' argument

locs <- foo.df[,5:4]
head(locs)
length(locs)

locs$Longitude<-as.numeric(locs$Longitude)
locs$Latitude<-as.numeric(locs$Latitude)

#Keep things simple and put the results in a list first
temps <- list()
for(i in 1:length(dates)) {
  options(prism.path = dates[i])
  climate_data <- prism_stack(ls_prism_data()) 
  temps[[i]] <- extract(climate_data, locs)
}

#Error in list.files(getOption("prism.path")) : invalid 'path' argument
#In addition: Warning messages:
#  1: 'prism_stack' is deprecated.
#Use '`pd_stack()`' instead.
#See help("Deprecated") 
#2: 'ls_prism_data' is deprecated.
#Use '`prism_archive_ls()`' instead.
#See help("Deprecated")

我不确定我需要更改什么以 a) 使此代码工作几天而不是几年 b) 如何将此脚本从已弃用的代码转换为最新的代码。

感谢您的帮助

让我们一步一步来。

library(prism)
#> Be sure to set the download folder using `prism_set_dl_dir()`.
dates <-  seq(as.Date("2019-01-01"),as.Date("2019-01-02"), by="days")
unique(dates)
#> [1] "2019-01-01" "2019-01-02"

到目前为止一切都很好。

for (d in unique(dates)) {
  dir.create(d, FALSE)
  options(prism.path = d)
  get_prism_dailys(type = "ppt", dates = d) 
}

#Error in dir.create(d, FALSE) : invalid 'path' argument

为什么??让我们看看有什么问题:

for (d in unique(dates)) {
  print(d)
}

#> [1] 17897
#> [1] 17898

啊,d in dates 转换为 integer,而 dir.create() 需要一个 character。让我们更改它提供日期 as.character:

for (d in 1:length(dates)) {
  dir.create(as.character(dates[d]), TRUE)
  options(prism.path = as.character(dates[d]))
  get_prism_dailys(type = "ppt", dates = dates[d]) 
}
#>   |   0%  |
     |======================================================================| 100%
#>   |   0%  |
     |======================================================================| 100%

似乎数据已下载;确保我们现在可以检查它:

list.files(as.character(dates[1]))
#> [1] "PRISM_ppt_stable_4kmD2_20190101_bil"    
#> [2] "PRISM_ppt_stable_4kmD2_20190101_bil.zip"

由于您还没有分享 `foo.df`` 的详细信息,我将跳过这部分:

locs <- foo.df[,5:4]
head(locs)
length(locs)

locs$Longitude<-as.numeric(locs$Longitude)
locs$Latitude<-as.numeric(locs$Latitude)

剩下的很简单:下面的错误和前面的一样,path必须是character

#Error in list.files(getOption("prism.path")) : invalid 'path' argument

所以,让我们根据需要提供 as.character。已弃用的函数应替换为新函数,例如:

#Keep things simple and put the results in a list first
temps <- list()
for(i in 1:length(dates)) {
  options(prism.path = as.character(dates[i]))
  climate_data <- pd_stack(prism_archive_ls()) 
  temps[[i]] <- extract(climate_data, locs)
}

此致, 格热戈日