使用 R 将许多值传递给 API

Passing many values to an API using R

我希望扩展我的工作 API 查询以查询许多 ID 并将其存储在一个漂亮的矩形数据框中。

我需要一些帮助来了解如何扩展我的代码以获取多个输入变量以及如何存储它们。

我的工作代码如下:

pacman::p_load(tidyverse,httr,jsonlite,purrr)

path <- "https://npiregistry.cms.hhs.gov/api/?"

request <- httr::GET(url = path,
                     query = list(version = "2.0",
                                  number = 1154328938))

response <- content(request, as = "text", encoding = "UTF-8")

df <- jsonlite::fromJSON(response, flatten = TRUE) %>%
  data.frame()

providerData <- df %>% 
  select(results.number, 
         results.basic.name,
         results.basic.gender,
         results.basic.credential,
         results.taxonomies) %>%
  unnest_wider(results.taxonomies) %>% 
  rename(Provider_NPI = results.number,
         Provider_Name = results.basic.name,
         Provider_Gender = results.basic.gender,
         Provider_Credentials = results.basic.credential,
         Provider_Taxonomy = desc,
         Provider_State = state) %>% 
  select(-code,-license,-primary) 

我现在想查询这4个ID,并将它们存储在与上面示例相同的数据格式中。

我尝试过使用 lapply 并构建我自己的函数,但我不完全理解如何创建存储返回值的对象。

我的函数如下所示:

getNPI <- function(object) {
  httr::GET(url = path,
            query = list(version = "2.0",
                         number = object))

}
providerIDs <- c('1073666335',
                 '1841395357',
                 '1104023381',
                 '1477765634')

test <- lapply(providerIDs, getNPI)

我很确定我需要某种对象,如列表或数据框来存储 httr::GET 的值,但这正是我失败的地方。另一部分是如何从返回的对象中提取适当的值并将它们存储在整洁的数据框中。

非常感谢您的帮助。

您必须在 getNPI 函数中添加 "cleaning" 步骤和 return 一个 df,然后您可以稍后使用 do.call 作为 "combine"所有数据放入一个"final"数据框:

例子

getNPI <- function(object) {
 request <- httr::GET(url = path,
    query = list(version = "2.0",
                   number = object))

 df <- content(request, as = "text", encoding = "UTF-8") %>%
   jsonlite::fromJSON(. , flatten = TRUE) %>%
   data.frame()

 df %>%
   select(results.number, 
       results.basic.name,
       results.basic.gender,
       results.basic.credential,
       results.taxonomies) %>%
 unnest_wider(results.taxonomies)
 # Add more selection, mutations as needed
}

test <- lapply(providerIDs, getNPI)

# Use do.call for rbind an make the final df
final_df <- do.call("rbind",test)

希望对您有所帮助

注意:为了 rbind 按预期与 do.call 一起工作,所有列名称必须相同。