walkingcoreAPI:如何在仅接受第一个元素的数据帧上使用函数

时间:2017-06-09 13:15:13

标签: r

我尝试使用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?

1 个答案:

答案 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密钥,因此无法测试这是否有效,但它确实消除了您获得的错误。