1: rbioapi: User-Friendly R Interface to Biologic Web Services' API
Currently fully supports Enrichr, JASPAR, miEAA, PANTHER, Reactome, STRING, and UniProt!
The goal of rbioapi is to provide a user-friendly and consistent interface to biological databases and services: In a way that insulates the user from technicalities of using web services API and creates a unified and easy-to-use interface to biological and medical web services.
With rbioapi, you do not need to have technical knowledge about web services API or learn how to work with a new package for every biologic service or database. This an ongoing project; New databases and services will be added periodically. Feel free to suggest any databases or services you often use.
rbioapi is dedicated to Biological or Medical databases and web services. Currently, rbioapi supports and covers every API resources in the following services: (in alphabetical order):
On CRAN (Stable) version: (https://cran.r-project.org/package=rbioapi)
- Enrichr (rbioapi vignette article) (new)
- JASPAR (rbioapi vignette article) (new)
- miEAA (rbioapi vignette article)
- PANTHER (rbioapi vignette article)
- Reactome (rbioapi vignette article)
- STRING (rbioapi vignette article)
- UniProt (rbioapi vignette article)
Only on Github (Developmental) version: (https://github.com/moosa-r/rbioapi/):
- currently none
Each of the services has its dedicated vignette article. However, In this article, I will write about the general framework of rbioapi. Make sure to check the vignette article of each service to learn more about how to use them.
Note That: rbioapi is an ongoing project. New databases and services will be implemented periodically in order to gradually make the package as comprehensive as possible. Do you see yourself often using a certain database/service? Feel free to suggest any database/service by creating an issue on our GitHub repository. I will appreciate any suggestions.
However, the CRAN version is released at most once every 1-2 months, You can install the most recent (development) version from GitHub with:
Now, we can load the package:
To make the namespace more organized, functions has been named with the following pattern:
rba_string_version() #> Retrieving the STRING database version and address used by rbioapi. #> $string_version #>  "12.0" #> #> $stable_address #>  "https://version-12-0.string-db.org"
Thus, to this version, rbioapi function will have one of the following naming schema:
To provide more control, multiple options have been implemented. See
the manual of
rba_options() function for a full description
of available options. In short, some of the options will govern
rbioapi’s connection with servers (e.g. timeout, retry) and some of the
options will modify your experience with rbioapi (e.g. verbose,
diagnostics, save_file). There are two ways that you may use to change
any option. Also, you can get table of available rbioapi options and
their current values by calling
rba_options() #> rbioapi_option current_value allowed_value #> 1 diagnostics FALSE Logical (TRUE/FALSE) #> 2 dir_name rbioapi Character #> 3 progress FALSE Logical (TRUE/FALSE) #> 4 retry_max 0 Numeric (0 or greater) #> 5 retry_wait 10 Numeric (0 or greater) #> 6 save_file FALSE Logical (TRUE/FALSE) #> 7 skip_error TRUE Logical (TRUE/FALSE) #> 8 timeout 30 Numeric (0.1 or greater) #> 9 verbose TRUE Logical (TRUE/FALSE)
Now, let us consider the ways in which we can alter the settings:
Changing an option globally means that for the rest of your R
session, any rbioapi function will respect the changed option. To do
rba_options(). Each argument in this function
corresponds to a certain option; Thus by running this function with your
desired new values, you could globally alter that rbioapi option. for
You can pass additional arguments to any rbioapi function using
“ellipsis” (the familiar
… or dot dot dot!). Meaning that
you can call any function with additional arguments where each is
‘option = value’ pair. This way, any changes in options will be confined
within that particular function call. For example:
## Save the server's raw response file: x <- rba_reactome_species(only_main = TRUE, save_file = "reactome_species.json") ## Also, in the case of connection failure, retry up to 10 times: x <- rba_reactome_species(only_main = TRUE, save_file = "reactome_species.json", retry_max = 10)
## Run these codes in your own R session to see the difference. ## show internal diagnostics boring details x <- rba_uniprot_proteins_crossref(db_id = "CD40", db_name = "HGNC", diagnostics = TRUE) ## The next function you call, will still use the default rbioapi options x <- rba_uniprot_proteins_crossref(db_id = "CD40", db_name = "HGNC")
The second exception in functions’ naming schema is
rba_connection_test(). Run this simple function to check
your connection with the supported services/databases. If you encounter
errors when using rbioapi, kindly run this function to make sure that
your internet connection or the servers are fine.
rba_connection_test(print_output = TRUE) #> Checking Your connection to the Databases currently supported by rbioapi: #> --->>> Internet : #> +++ Connected to the Internet. #> --->>> Enrichr : #> +++ The server is responding. #> --->>> Ensembl : #> +++ The server is responding. #> --->>> JASPAR : #> +++ The server is responding. #> --->>> miEAA : #> +++ The server is responding. #> --->>> PANTHER : #> +++ The server is responding. #> --->>> Reactome Content Service : #> +++ The server is responding. #> --->>> Reactome Analysis Service : #> +++ The server is responding. #> --->>> STRING : #> +++ The server is responding. #> --->>> UniProt : #> +++ The server is responding.
Some API resources will return paginated responses. This is
particularly common in API resources which return potentially very large
responses. In rbioapi, for these cases, there are arguments such as
“page_number” (with default value of 1) and -if the API resource allows-
“page_size”. To save your time, you may use
This function will iterate over the pages you have specified.
Take rba_uniprot_taxonomy_name as an example. This function allows you to search taxonomic nodes in UniProt. The response can potentially have a huge size, so UniProt returns a paginated response. For example, if we search for nodes that contain “adenovirus”, there is a large number of hits:
adeno <- rba_uniprot_taxonomy_name(name = "adenovirus", search_type = "contain", page_number = 1) str(adeno, max.level = 2) #> List of 2 #> $ taxonomies:'data.frame': 200 obs. of 8 variables: #> ..$ taxonomyId : int [1:200] 10509 10510 10511 10512 10513 10514 10515 10519 10521 10522 ... #> ..$ mnemonic : chr [1:200] "9ADEN" "ADEB3" "ADEB7" "9ADEN" ... #> ..$ scientificName: chr [1:200] "Mastadenovirus" "Bovine adenovirus B serotype 3" "Bovine adenovirus 7" "Canine adenovirus 1" ... #> ..$ rank : chr [1:200] "genus" "no rank" "no rank" "no rank" ... #> ..$ superregnum : chr [1:200] "V" "V" "V" "V" ... #> ..$ hidden : logi [1:200] FALSE TRUE TRUE TRUE TRUE TRUE ... #> ..$ commonName : chr [1:200] NA "BAdV-3" "BAdV-7" NA ... #> ..$ synonym : chr [1:200] NA "Mastadenovirus bos3" NA NA ... #> $ pageInfo :List of 3 #> ..$ resultsPerPage: int 200 #> ..$ currentPage : int 1 #> ..$ totalRecords : int 999
As you can see, the server has returned the first page of the
response, to retrieve the other pages, you should make separate calls
and change the “page_number” argument within each call, or simply use
rba_pages() as demonstrated below:
adeno_pages = rba_pages(quote(rba_uniprot_taxonomy_name(name = "adenovirus", search_type = "contain", page_number = "pages:1:3"))) ## You can inspect the structure of the response: str(adeno_pages, max.level = 2) #> List of 3 #> $ page_1:List of 2 #> ..$ taxonomies:'data.frame': 200 obs. of 8 variables: #> ..$ pageInfo :List of 3 #> $ page_2:List of 2 #> ..$ taxonomies:'data.frame': 200 obs. of 8 variables: #> ..$ pageInfo :List of 3 #> $ page_3:List of 2 #> ..$ taxonomies:'data.frame': 200 obs. of 8 variables: #> ..$ pageInfo :List of 3
As you can see, what we have done was:
Wrap the function call in
qoute()and enter that as the input for
Replace the argument we want to iterate over it, with a string in this format: “pages:start:end”. For example, we supplied page_number = “pages:1:3” to get the responses of pages 1 to 3.
rbioapi is an interface between you and other databases and services. Thus, if you have used rbioapi in published research, in addition to kindly citing rbioapi, make sure to fully and properly cite the databases/services you have used. Suggested citations have been added in the functions’ manuals, under the “references” section; Nevertheless, it is the user’s responsibility to check for proper citations and to properly cite the database/services that they have used.
- Moosa Rezwani, Ali Akbar Pourfathollah, Farshid Noorbakhsh, rbioapi: user-friendly R interface to biologic web services’ API, Bioinformatics, Volume 38, Issue 10, 15 May 2022, Pages 2952–2953, https://doi.org/10.1093/bioinformatics/btac172
This package, rbioapi, is an unofficial interface implementation and is not associated, endorsed, or officially connected in any way with the original databases and web services. The creators and maintainers of rbioapi are independent entities and have no official relationship with those databases and web services.
When using rbioapi, remember that you are querying data from web
services; So please be considerate. Never flood a server with requests,
if you need to download unreasonably large volumes of data,
directly downloading the databases supplied in those services may be a
better alternative. If you see yourself being rate-limited from any
server (HTTP 429 Too Many Requests response status
code), know that you are sending more requests than what the server
interprets as normal behavior, so please seek other methods or use
Sys.sleep() between your requests.
Each supported service has a dedicated vignette article. Make sure to check those too.
- Enrichr (Documentation site)
- JASPAR (Documentation site)
- miEAA (Documentation site)
- PANTHER (Documentation site)
- Reactome (Documentation site)
- STRING (Documentation site)
- UniProt (Documentation site)
We are also adding vignette articles focusing on tasks and workflows:
To learn more about the design philosophy and the concepts behind developing rbioapi, please read our paper in Bioinformatics.
#> R version 4.3.2 (2023-10-31) #> Platform: x86_64-pc-linux-gnu (64-bit) #> Running under: Ubuntu 22.04.3 LTS #> #> Matrix products: default #> BLAS: /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3 #> LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.20.so; LAPACK version 3.10.0 #> #> locale: #>  LC_CTYPE=C.UTF-8 LC_NUMERIC=C LC_TIME=C.UTF-8 #>  LC_COLLATE=C.UTF-8 LC_MONETARY=C.UTF-8 LC_MESSAGES=C.UTF-8 #>  LC_PAPER=C.UTF-8 LC_NAME=C LC_ADDRESS=C #>  LC_TELEPHONE=C LC_MEASUREMENT=C.UTF-8 LC_IDENTIFICATION=C #> #> time zone: UTC #> tzcode source: system (glibc) #> #> attached base packages: #>  stats graphics grDevices utils datasets methods base #> #> other attached packages: #>  rbioapi_0.8.0 #> #> loaded via a namespace (and not attached): #>  vctrs_0.6.4 httr_1.4.7 cli_3.6.1 knitr_1.45 #>  rlang_1.1.2 xfun_0.41 stringi_1.8.2 purrr_1.0.2 #>  textshaping_0.3.7 jsonlite_1.8.7 glue_1.6.2 rprojroot_2.0.4 #>  htmltools_0.5.7 ragg_1.2.6 sass_0.4.7 rmarkdown_2.25 #>  evaluate_0.23 jquerylib_0.1.4 fastmap_1.1.1 yaml_2.3.7 #>  lifecycle_1.0.4 memoise_2.0.1 stringr_1.5.1 compiler_4.3.2 #>  fs_1.6.3 systemfonts_1.0.5 digest_0.6.33 R6_2.5.1 #>  curl_5.1.0 magrittr_2.0.3 bslib_0.6.1 tools_4.3.2 #>  pkgdown_2.0.7 cachem_1.0.8 desc_1.4.2