openFDA makes querying the openFDA API from R a breeze. The API itself serves publicly available data from the FDA about foods, drugs, devices, and more. This data includes data such as recall enforcement reports, adverse events, manufacturer details, and - again - even more! Note that the data on openFDA has not been validated for clinical or production use.
The easiest way to install openFDA is to get it from CRAN:
install.packages("openFDA")
# install.packages("pak")
pak::pkg_install("simpar1471/openFDA")
library(openFDA)
The full documentation for the API is online, so look at the openFDA website to get a full feel for the API itself.
The R package lets you query the API directly from R, using httr2.
search <- openFDA(
search = "openfda.generic_name:furosemide",
limit = 5
)
search
#> <httr2_response>
#> GET
#> https://api.fda.gov/drug/drugsfda.json?api_key=[API_KEY]&search=openfda.generic_name:furosemide&limit=5
#> Status: 200 OK
#> Content-Type: application/json
#> Body: In memory (26060 bytes)
The underlying response is JSON data - you can use
httr2::resp_body_json()
to get the JSON data as a nested list, then
extract the fields you want.
json <- httr2::resp_body_json(search)
json$results[[1]]$openfda$brand_name
#> [[1]]
#> [1] "FUROSCIX"
json$results[[1]]$openfda$pharm_class_epc
#> [[1]]
#> [1] "Loop Diuretic [EPC]"
I’ve found purrr to be very useful for parsing this data quickly.
purrr::map_chr(
.x = json$results,
.f = \(result) purrr::pluck(result, "openfda", "manufacturer_name", 1)
)
#> [1] "scPharmaceuticals Inc."
#> [2] "Graviti Pharmaceuticals Private Limited"
#> [3] "Hikma Pharmaceuticals USA Inc."
#> [4] "Civica, Inc."
#> [5] "Eugia US LLC"
The openfda package from
rOpenHealth
also wraps the openFDA API from R, and is available on
GitHub. It’s got a pretty neat structure whereby you build up a query
using individual functions for each parameter - though it’s my personal
preference to keep these as parameters to a single function. It also
makes results available in data frames, which is nice, but I think
working with the response object and parsing the underlying JSON
yourself permits more powerful interactions with the API.
There is also FDAopenR, which I couldn’t quite wrap my head around. The package appears to be in working order, though!