0

rnoaa 包一次只能收集 ​​30 天的气压信息https://cran.r-project.org/web/packages/rnoaa/rnoaa.pdf。我正在寻找创建一个函数/ for 循环来每月从包中提取数据。它是所需的特定日期格式,YYYYMMDD。否 - 或 /。我从一个函数开始,但 lapply 似乎并没有应用于调用气压数据的函数。

我已经以多种方式尝试过循环,但我似乎无法理解。这是一个例子。

for (i in dates)) {
  air_pressure[i] <- coops_search(begin_date = start[i], end_date = end[i], 
   station_name = 8727520, product= "air_pressure", units = "metric", time_zone = "gmt")
  print(air_pressure[i])
}

start<-seq(as.Date("2015/01/01"), by = "month", length.out = 100)
start <- as.numeric(gsub("-","",start))

end<-seq(as.Date("2015/02/01"), by = "month", length.out = 100)
end <- as.numeric(gsub("-","",end))

pressure_function<- function(air_pressure) { 
     coops_search(station_name = 8727520, begin_date = starting,
               end_date = ending, product = "air_pressure")
}

lapply(pressure_function, starting= start, ending= end, FUN= sum)

没有真正的错误消息,只是不填充或运行该函数。

4

1 回答 1

0

这里有一些非常基本的事情是错误的。首先,您的 for 循环有太多右括号。其次,您的lapply调用将函数作为第一个参数传递;这不起作用,将其传递到第二个插槽中。和更多 ....

无论如何,试试这个:

library(rnoaa)
fun <- function(begin, end) {
  coops_search(station_name = 8727520, begin_date = gsub("-", "", begin),
    end_date = gsub("-", "", end), product = "air_pressure")
}
start_dates <- seq(as.Date("2015-01-01"), as.Date("2015-12-31"), by = "month")
end_dates <- seq(as.Date("2015-02-01"), as.Date("2016-01-01"), by = "month") - 1
res <- Map(fun, start_dates, end_dates)
df <- dplyr::bind_rows(lapply(res, "[[", "data"))
head(df)
#>                     t      v     f
#> 1 2015-01-01 00:00:00 1025.3 0,0,0
#> 2 2015-01-01 00:06:00 1025.4 0,0,0
#> 3 2015-01-01 00:12:00 1025.5 0,0,0
#> 4 2015-01-01 00:18:00 1025.6 0,0,0
#> 5 2015-01-01 00:24:00 1025.6 0,0,0
#> 6 2015-01-01 00:30:00 1025.6 0,0,0
NROW(df)
#> [1] 87600
于 2019-09-11T18:51:19.747 回答