如何使用 R 和 DARKSKY api 创建一个函数来检索多个城市的历史天气?

JRH06

我正在尝试使用 DARKSKY API 检索 R 中 100 个城市的历史天气数据。

以下代码可用于获取 1 个城市的历史数据,但是我在创建循环函数以遍历 100 个纬度和经度的列表并输出数据时遇到问题。

weather <- function(Long,Lat) 
{ a <-seq(Sys.Date()-10, Sys.Date(), "1 day") %>%
  map(~get_forecast_for(Long,Lat,.x, units = 'si')) %>%
  map_df('daily')

write.csv(a,"blah blah")

}

weather(52.6983,-1.0735)

我最初的想法是上传包含我需要的所有经度和纬度的 csv 文件。将它们设置为变量,然后将它们映射到上面的函数。

data <- read.csv("blah blah")
Long <- data$Longitude
Lat <- data$Latitude
map(c("Long","Lat"),weather)

但它不断带回错误消息。

有人可以帮忙吗?

谢谢

德克鲁沃洛

你快到了。get_forecast_for按行迭代函数需要做一些事情purrr包中,该pmap函数适用于按行重复函数,而该imap函数可用于按行中的单元格重复函数。

使用这种方法,我编写了两个函数:weather_at_coordsweather. weather_at_coords用于向 DarkSkyAPI 发送请求,获取给定时间范围内(即过去 10 天)特定位置的天气。weather函数用于逐行重复该函数。

我看到您想要嵌套对象daily,因此编写了从响应中提取该列表的函数。我假设您还想要 data.frame 中的结果,所以我添加了bind_rows. 我添加了一个列,id以便可以将行正确链接到某个位置(或者您可以添加任何您喜欢的列)。

# pkgs
library(tidyverse)
library(darksky)

# set API Key: free from https://darksky.net/dev
darksky::darksky_api_key()

# Forecast at a given point and time period
weather_at_coords <- function(...) {
  d <- rlang::list2(...)
  time <- seq(Sys.Date()-10, Sys.Date(), "1 day")
  response <- imap(time, ~ darksky::get_forecast_for(d$lat, d$lon, .x, units = "si")[["daily"]])
  out <- bind_rows(response) %>% mutate(id = d$id)
  return(out)
}

# primary function (iterates across rows)
weather <- function(data) {
  result <- pmap(data, ~ weather_at_coords(...))
  return(bind_rows(result))
}

# sample data
d <- data.frame(
  id = c("a", "b"),
  lat = c(37.8267,34.8267),
  lon = c(-122.423, -120.423)
)

# run
x <- weather(d)
x

笔记

  1. 确保rlang安装软件包
  2. 根据需要调整latlon变量名称。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

R Shiny 和 Darksky API 错误的组合

如何更改Darksky API请求的时间格式?

我们如何通过Darksky API提取2000年伦敦的天气?

如何使用Darksky API中的“选项”将温度从华氏温度更改为摄氏度?

如何从JSON DarkSky Swift获得一天

Darksky API无法显示正确的时间

试图在Laravel中获取Darksky API数据

如何在 R 中创建一个函数来比较数据帧的连续偶数行和奇数行并返回相同格式的数据帧?

创建一个函数来接收 R 中的数据框名称和列

如何使用Google YouTube API检索和显示第一个结果链接?

如何使用reduce、map或filter创建一个函数来显示和计算数组对象的每个值?

创建一个读取和使用文本的API

使用函数和变异在 R 中创建一个新列

如何创建一个函数来计算和返回平均值、最大值和最小值?

如何创建一个for循环,以使用R打开,变异和保存.csv文件?

如何使用Terraform和AWS API Gateway创建API代理

如何使用 R 创建安全的 API?

创建一个循环或函数来收集使用r?中另一个数据帧中的一个数据帧中的其他列值计算的多个向量的值。

使用HTTR和R访问Coinbase API

使用 Node js,如何使用 yahoo 天气 api 在单个请求中获取多个城市的天气提要

如何使用weather api删除天气预报中的第一个天气

R Shiny:如何构建一个函数来在 R 中创建许多类似的 renderUI 选择器?

R函数使用。和〜

如何使用curl的rest api从Nexus检索工件校验和?

如何使用Google API从onConnected()方法检索经度和纬度

需要找到一个R函数来过滤和选择文本标题

编写一个 R 函数来检查矩阵是否只包含 0 和 1

创建一个包含dplyr和ggplot的R函数

您是否可以创建一个使用前缀和后缀调用的R函数(类似于方括号)?