从 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)
}
此致,
格热戈日
我尝试按照 [
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)
}
此致, 格热戈日