r - 在 R 中的 mutate 语句中调用 API
问题描述
我正在尝试使用API确定给定日期的日出时间
所以我有一个像这样的数据框
Date
1 2018-01-03
2 2018-01-03
3 2018-01-04
4 2018-01-08
5 2018-01-09
虽然我可以在没有粘贴语句的情况下让它工作,但当我将它放入 mutate 时,它不起作用并返回错误:
dates <- structure(list(Date = c("2018-01-03", "2018-01-03", "2018-01-04",
"2018-01-08", "2018-01-09")), row.names = c(NA, 5L), class = "data.frame")
dates %>%
mutate(sunrise = as.character(fromJSON(rawToChar(GET(paste0("https://api.sunrise-sunset.org/json?lat=40.730610&lng=-73.935242&date=", Date))$content))$results[1])
)
ERROR:
Error: Problem with `mutate()` input `sunrise`.
x length(url) == 1 is not TRUE
i Input `sunrise` is `as.character(...)`.
这里的目标是我希望每天都有一个新的日出专栏。如果我更改 paste0 字段并给它一个确切的字符串,它会完美地工作,但不是在 mutate 中,我不知道为什么......
解决方案
另一种选择是map
从purrr
library(dplyr)
library(purrr)
library(jsonlite)
dates %>%
mutate(sunrise = map_chr(sprintf("https://api.sunrise-sunset.org/json?lat=40.730610&lng=-73.935242&date=%s", Date),
~ as.character(fromJSON(rawToChar(GET(.x)$content))$results[1])))
# Date sunrise
#1 2018-01-03 12:19:53 PM
#2 2018-01-03 12:19:53 PM
#3 2018-01-04 12:19:52 PM
#4 2018-01-08 12:19:27 PM
#5 2018-01-09 12:19:15 PM
数据
dates <- structure(list(Date = c("2018-01-03", "2018-01-03", "2018-01-04",
"2018-01-08", "2018-01-09")), row.names = c(NA, 5L), class = "data.frame")
推荐阅读
- javascript - 如何访问数组中对象的名称属性
- c# - 当我们用字段调用替换静态方法调用时如何删除括号
- c# - 检查对象是否在我创建的列表中
- c# - 如何在 Swagger 中指定 400 响应返回字符串和 OK 响应返回 xlsx 文件的操作方法?
- jquery - 如何在 jquery ajax 中拆分 api 响应以作为一个响应的不同站点的测试和 prod 脚本
- c++ - Valgrind 和 ostream 运算符
- android - React-Navigation 添加到现有应用程序
- python - Python Pandas 基于另一个对应数据框合并两个数据框
- c++ - 我可以以某种方式将循环内的参数与第一个循环内的参数联系起来吗?
- java - 使用并发请求调用 Rest 端点