我尝试使用walkcoreAPI为多个长/拉对计算步行得分。但是,getWS on函数接受数据帧中的第一个输入。
getWS生成一个列表产品,如下所示。
$status
[1] 1
$walkscore
[1] 0
$description
[1] "Car-Dependent"
$updated
[1] "2017-06-08 22:49:20.313160"
$snappedLong
[1] 38.943
$snappedLat
[1] -77.076
考虑到这一点,我试图创建自己的函数,从列表中提取$ walkcore。
walkscore <- function(x, y){
walk <- getWS(x, y, "YOUR API KEY")
walk$walkscore
}
然后我试图在一个简单的变异计算中使用它。
library(walkscoreAPI)
library(tidyverse)
# Create sample df
lat <- c(38.942523, 37.942523)
long <- c(-77.076403, -78.076403)
df <- tibble(
long,
lat)
#Calculate score
df1 <- df %>%
mutate(score = walkscore(long, lat))
这会引发以下错误
Error: invalid 'description' argument
In addition: Warning message:
In if (file == "") file <- stdin() else { :
the condition has length > 1 and only the first element will be used
如何重写这个以运行整个df的getWS并为每一行拉出$ walkscore?
答案 0 :(得分:1)
你的问题是mutate
将x和y作为向量传递,而不是元素。您可以在函数中使用mapply
来处理此问题,如下所示:
mywalkscore <- function(x, y) {
walk <- mapply(function(x1,y1) getWS(x1,y1,"YOUR API KEY")$walkscore, x, y)
unlist(walk)
}
df1 <- df %>%
mutate(score = walkscore(long, lat))
我没有API密钥,因此无法测试这是否有效,但它确实消除了您获得的错误。