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.
Installation
The easiest way to install openFDA is to get it from CRAN:
install.packages("openFDA")
Development version
# install.packages("pak")
pak::pkg_install("simpar1471/openFDA")
Using 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.
Other R packages for openFDA
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!