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")
::pkg_install("simpar1471/openFDA") pak
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.
<- openFDA(
search 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.
<- httr2::resp_body_json(search)
json
$results[[1]]$openfda$brand_name
json#> [[1]]
#> [1] "FUROSCIX"
$results[[1]]$openfda$pharm_class_epc
json#> [[1]]
#> [1] "Loop Diuretic [EPC]"
I’ve found purrr to be very useful for parsing this data quickly.
::map_chr(
purrr.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!