From bc2f95e50f1d9364aa6846e74b7a03936ec3d8f3 Mon Sep 17 00:00:00 2001 From: stitam Date: Thu, 19 Mar 2020 11:58:37 +0000 Subject: [PATCH 1/8] Alternatives for handling NA inputs --- CONTRIBUTING.md | 30 ++++---- R/alanwood.R | 12 +-- R/chebi.R | 137 +++++++++++++++++++++++++++++---- data/aw_idx.rda | Bin 63728 -> 64686 bytes tests/testthat/test-alanwood.R | 23 ++++-- tests/testthat/test-chebi.R | 5 ++ 6 files changed, 167 insertions(+), 40 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c8cb3f66..d301a4a8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -4,11 +4,11 @@ Thank you for your interest in contributing to the project! The goal of this gui ### Fill out the survey -The ```webchem``` survey allows us to learn who you are, which databases you use and how you interact with chemical data. This is extremely valuable information for us and guides our development efforts. The survey take about 5 minutes to fill out. You can fill out the survey [here]() (under development). +The `webchem` survey allows us to learn which databases you use and how you interact with chemical data. This is extremely valuable information for us and guides our development efforts. The survey take about 5 minutes to fill out. You can fill out the survey [here]() (under development). ### Share a use case -Write us an e-mail and show us a full example of how you use or how you would like to use ```webchem``` in your data analysis! This would give us ideas about new features and also help us create better vignettes that help others get started. Please send your e-mails to . +Write us an e-mail and show us a full example of how you use or how you would like to use `webchem` in your data analysis! This would give us ideas about new features and also help us create better vignettes that help others get started. Please send your e-mails to . ### Raise a new issue or join discussion on an existing issue @@ -34,34 +34,34 @@ We do not have strong guidelines for code contributions and are happy to help at 1. We follow the [tidyverse](https://tidyverse.org) style. You can find the style guide [here](https://style.tidyverse.org/). Before committing your code, we encourage you to use ```lintr::lint_file()``` to check for nonconformances. -2. We use ```roxygen2``` for documentation. Please make sure you update the package to the latest version before you update the documentation with ```devtools::document()```. In fact, it is good practice to update all the packages that are used by webchem before making changes. +2. We use [`roxygen2`](https://cran.r-project.org/web/packages/roxygen2/index.html) for documentation. Please make sure you update the package to the latest version before you update the documentation with `devtools::document()`. Use `@noRd` for non exported functions. -2. For web scraping, we recommend the use of the [polite](https://dmi3kno.github.io/polite/) package. +3. Please use the [`xml2`](https://cran.r-project.org/web/packages/xml2/index.html) package instead of the `XML` package. The maintainance of xml2 is much better. -We want to keep dependencies to a minimum: +4. Please use the lightweight [`jsonlite`](https://cran.r-project.org/web/packages/jsonlite/index.html) package for handling JSON. -3. Please use the [`xml2`](https://github.com/hadley/xml2) package instead of the `XML` package. The maintainance of xml2 is much better. +5. Use utilities in `webchem::utils.R` when possible to keep function style consistent across the package. -4. Please use the lightweight [`jsonlite`](https://github.com/jeroenooms/jsonlite) package for handling JSON. - -5. Use utilities in utils.R when possible to keep function style consistent across the package. - -6. Be nice to the resources! Use appropriate timeouts. +6. Be nice to the resources! Minimise interaction with the servers. Use appropriate timeouts. For web scraping, we recommend the use of the [`polite`](https://cran.r-project.org/web/packages/polite/index.html) package. 7. Tests go into a separate tests branch and not in the master branch. Some consistency guidelines: -8. Functions that query a database for one or more database specific identifiers should follow the naming convention ```get_*```, e.g. the function that queries ChEBI IDs is called ```get_chebiid()```. +8. Functions that query a database for one or more database specific identifiers should follow the naming convention `get_*`, e.g. the function that queries ChEBI IDs is called `get_chebiid()`. + +9. The naming of functions that query a database for chemical information should start with the name of the database, followed by the functionality, e.g. `pc_synonyms()` searches for synonyms in PubChem. + +10. Functions should always validate their input when appropriate. Use `match.arg()` for input validation. -9. The naming of functions that query a database for chemical information should start with the name of the database, followed by the functionality, e.g. ```pc_synonyms()``` searches for synonyms in PubChem. +11. Functions should always return the same output structure, even for invalid inputs, e.g. unknown chemicals, or `NA`. Make sure `NA` is not confused with sodium. Include tests. ### Data Sources You might think all webscraping is perfectly legal but it is unfortunately not that simple. -Some services allow you to browse their website but do not allow you programmable access, for various reasons. Therefore, we always have to check the Terms & Conditons and any other legal documents that might restrict programmable access. ```webchem``` only provides access to databases where programmable access is clearly approved by the database provider. A provider might create a publicly accessible API, and if they do not have a restrictive T&C, this indicates their implicit approval for programmatically accessing their data. In all other cases explicit approval is required, i.e. either the T&C has to state that scraping is allowed, or we have to acquire written consent from the database provider before developing functions that scrape their website. +Some services allow you to browse their website but do not allow you programmable access, for various reasons. Therefore, we always have to check the Terms & Conditons and any other legal documents that might restrict programmable access. `webchem` only provides access to databases where programmable access is clearly approved by the database provider. A provider might create a publicly accessible API, and if they do not have a restrictive T&C, this indicates their implicit approval for programmatically accessing their data. In all other cases explicit approval is required, i.e. either the T&C has to state that scraping is allowed, or we have to acquire written consent from the database provider before developing functions that scrape their website. -And there is a big difference between scraping and crawling. ```webchem``` does provide some scraping functionality but it does not provide crawling functionality. We aim to query databases not to download them. +And there is a big difference between scraping and crawling. `webchem` does provide some scraping functionality but it does not provide crawling functionality. ### Thanks for contributing! \ No newline at end of file diff --git a/R/alanwood.R b/R/alanwood.R index cb9aedf3..c69e24ac 100644 --- a/R/alanwood.R +++ b/R/alanwood.R @@ -53,6 +53,7 @@ aw_query <- function(query, type = c("commonname", "cas"), verbose = TRUE, } takelink <- links[tolower(names) == tolower(query)] + if (is.na(query)) takelink <- vector() if (length(takelink) == 0) { message("Not found! Returning NA.\n") return(list(cname = NA, @@ -77,7 +78,7 @@ aw_query <- function(query, type = c("commonname", "cas"), verbose = TRUE, if (verbose) message("Querying ", takelink) - Sys.sleep(rgamma(1, shape = 15, scale = 1/10)) + Sys.sleep(rgamma(1, shape = 15, scale = 1 / 10)) ttt <- read_html(paste0("http://www.alanwood.net/pesticides/", takelink)) status <- xml_text( @@ -133,7 +134,7 @@ aw_query <- function(query, type = c("commonname", "cas"), verbose = TRUE, out <- list(cname = cname, status = status, pref_iupac_name = pref_iupac_name, iupac_name = iupac_name, cas = cas, formula = formula, activity = activity, - subactivity = subactivity, inchikey = inchikey, inch = inchi, + subactivity = subactivity, inchikey = inchikey, inchi = inchi, source_url = source_url) return(out) } @@ -153,8 +154,6 @@ aw_query <- function(query, type = c("commonname", "cas"), verbose = TRUE, #'@author Eduard Szoecs, \email{eduardszoecs@@gmail.com} build_aw_idx <- function() { idx1 <- read_html("http://www.alanwood.net/pesticides/index_rn.html") - # idx2 <- read_html("http://www.alanwood.net/pesticides/index_rn1.html") - # idx3 <- read_html("http://www.alanwood.net/pesticides/index_rn2.html") prep_idx <- function(y) { names <- xml_text(xml_find_all(y, "//dl/dt")) links <- xml_attr( @@ -162,7 +161,6 @@ build_aw_idx <- function() { linknames <- xml_text(xml_find_all(y, "//dt/following-sibling::dd[1]/a[1]")) return(data.frame(names, links, linknames, stringsAsFactors = FALSE)) } - # aw_idx <- rbind(prep_idx(idx1), prep_idx(idx2) ,prep_idx(idx3)) aw_idx <- rbind(prep_idx(idx1)) aw_idx[["source"]] <- "rn" idx4 <- read_html("http://www.alanwood.net/pesticides/index_cn.html") @@ -183,6 +181,8 @@ build_aw_idx <- function() { aw_idx$linknames <- ln attr(aw_idx, "date") <- Sys.Date() + # do not delete this line + # occasionally the data file should be updated in the package # save(aw_idx, file = "data/aw_idx.rda") return(aw_idx) -} \ No newline at end of file +} diff --git a/R/chebi.R b/R/chebi.R index 1cd1cf60..9cd8708e 100644 --- a/R/chebi.R +++ b/R/chebi.R @@ -30,8 +30,8 @@ #' #' @references Hastings J, Owen G, Dekker A, Ennis M, Kale N, Muthukrishnan V, #' Turner S, Swainston N, Mendes P, Steinbeck C. (2016). ChEBI in 2016: -#' Improved services and an expanding collection of metabfolites. Nucleic Acids -#' Res. +#' Improved services and an expanding collection of metabfolites. Nucleic +#' Acids Res. #' #' Hastings, J., de Matos, P., Dekker, A., Ennis, M., Harsha, B., Kale, N., #' Muthukrishnan, V., Owen, G., Turner, S., Williams, M., and Steinbeck, C. @@ -72,8 +72,12 @@ get_chebiid <- function(query, ...) { foo <- function(query, match, from, max_res, stars, verbose, ...) { - # query = 'Isoproturon'; from = 'ALL'; match = 'ask'; max_res = 200; stars = 'ALL'; verbose = T # debuging - # arguments + if (is.na(query)){ + return(data.frame(chebiid = NA, + chebiasciiname = NA, + searchscore = NA, + entitystar = NA)) + } from_all <- c('ALL', 'CHEBI ID', 'CHEBI NAME', 'DEFINITION', 'ALL NAMES', 'IUPAC NAME', 'CITATIONS', 'REGISTRY NUMBERS', 'MANUAL XREFS', 'AUTOMATIC XREFS', 'FORMULA', 'MASS', 'MONOISOTOPIC MASS', @@ -116,7 +120,11 @@ get_chebiid <- function(query, out <- setNames(out, tolower(names(out))) if (nrow(out) == 0) { message('No result found. \n') - return(out) + return(data.frame( + chebiid = NA, + chebiasciiname = NA, + searchscore = NA, + entitystar = NA)) } if (match == 'all') { return(out) @@ -124,15 +132,18 @@ get_chebiid <- function(query, if (match == 'best') { if (verbose) message('Returning best match. \n') - out <- out[ with(out, order(searchscore, decreasing = TRUE)), ] - return(out[ which.max(out$searchscore), ]) + out <- out[with(out, order(searchscore, decreasing = TRUE)), ] + return(out[which.max(out$searchscore), ]) } if (match == "ask") { matched <- chooser(out$chebiid, 'all') - return(out[ out$chebiid == matched, ]) + return(out[out$chebiid == matched, ]) } if (match == 'na') { - return(data.frame(chebiid = NA)) + return(data.frame(chebiid = NA, + chebiasciiname = NA, + searchscore = NA, + entitystar = NA)) } } else { out <- data.frame(chebiid = NA) @@ -212,6 +223,7 @@ chebi_comp_entity <- function(chebiid, verbose = TRUE, ...) { foo <- function(chebiid, verbose, ...) { # chebiid = c('CHEBI:27744', 'CHEBI:17790'); verbose = TRUE # debuging + if (is.na(chebiid)) return(empty_chebi_comp_entity()) url <- 'http://www.ebi.ac.uk:80/webservices/chebi/2.0/webservice' headers <- c(Accept = 'text/xml', Accept = 'multipart/*', @@ -235,10 +247,8 @@ chebi_comp_entity <- function(chebiid, verbose = TRUE, ...) { add_headers(headers), body = body) if (res$status_code != 200) { - out <- data.frame(chebiid = NA) warning(http_status(res)$message) - - return(out) + return(empty_chebi_comp_entity()) } else { cont <- content(res, type = 'text/xml', encoding = 'utf-8') # restricted to one entry @@ -313,7 +323,7 @@ chebi_comp_entity <- function(chebiid, verbose = TRUE, ...) { #' @noRd #' l2df <- function(x) { - out <- data.frame(rbind.named.fill(lapply(x, unlist)), + out <- data.frame(rbind_named_fill(lapply(x, unlist)), row.names = NULL, stringsAsFactors = FALSE) @@ -331,7 +341,7 @@ l2df <- function(x) { #' @author Andreas Scharmueller, \email{andschar@@protonmail.com} #' @noRd #' -rbind.named.fill <- function(x) { +rbind_named_fill <- function(x) { nam <- lapply(x, names) unam <- unique(unlist(nam)) len <- lapply(x, length) @@ -340,4 +350,103 @@ rbind.named.fill <- function(x) { out[[i]] <- unname(x[[i]])[match(unam, nam[[i]])] } setNames(as.data.frame(do.call(rbind, out), stringsAsFactors = FALSE), unam) +} + +#' Create empty list for chebi_comp_entity +#' +#' The function creates a list with identical internal structure as a +#' chebi_comp_entity() output element. This is used in chebi_comp_entity() to +#' provide a valid output for invalid inputs and allow vectorisation. +#' @noRd +#' @autor Tamas Stirling, \email{stirling.tamas@@gmail.com} +empty_chebi_comp_entity <- function() { + properties <- data.frame( + chebiid = as.character(NA), + chebiasciiname = as.character(NA), + definition = as.character(NA), + status = as.character(NA), + smiles = as.character(NA), + inchi = as.character(NA), + inchikey = as.character(NA), + charge = as.character(NA), + mass = as.character(NA), + monoisotopicmass = as.character(NA), + entitystar = as.character(NA) + ) + chebiid_snd <- data.frame( + chebiids = as.character(NA) + ) + chem_structure <- list( + list("structure" = list(as.character(NA)), + "type" = list(as.character(NA)), + "dimension" = list(as.character(NA)), + "defaultStructure" = list(as.character(NA))) + ) + synonyms <- data.frame( + data = as.character(NA), + type = as.character(NA), + source = as.character(NA) + ) + iupacnames <- data.frame( + data = as.character(NA), + type = as.character(NA), + source = as.character(NA) + ) + formulae <- data.frame( + data = as.character(NA), + source = as.character(NA) + ) + regnumbers <- data.frame( + data = as.character(NA), + type = as.character(NA), + source = as.character(NA) + ) + citations <- data.frame( + data = as.character(NA), + type = as.character(NA), + source = as.character(NA) + ) + dblinks <- data.frame( + data = as.character(NA), + type = as.character(NA) + ) + parents <- data.frame( + chebiName = as.character(NA), + chebiId = as.character(NA), + type = as.character(NA), + status = as.character(NA), + cyclicRelationship = as.character(NA) + ) + children <- data.frame( + chebiName = as.character(NA), + chebiId = as.character(NA), + type = as.character(NA), + status = as.character(NA), + cyclicRelationship = as.character(NA) + ) + comments <- data.frame( + text = as.character(NA), + date = as.character(NA) + ) + origins <- data.frame( + speciesText = as.character(NA), + speciesAccession = as.character(NA), + SourceType = as.character(NA), + SourceAccession = as.character(NA), + componentText = as.character(NA), + componentAccession = as.character(NA) + ) + return(list("properties" = properties, + "chebiid_snd" = chebiid_snd, + "chem_structure" = chem_structure, + "synonyms" = synonyms, + "iupacnames" = iupacnames, + "formulae" = formulae, + "regnumbers" = regnumbers, + "citations" = citations, + "dblinks" = dblinks, + "parents" = parents, + "children" = children, + "comments" = comments, + "origins" = origins)) } \ No newline at end of file diff --git a/data/aw_idx.rda b/data/aw_idx.rda index bbc41b675e223544eb11a3f404b96b6a47e1876c..3c4bf198c205187ec68f40165dfb485df6499bb8 100644 GIT binary patch literal 64686 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 diff --git a/tests/testthat/test-alanwood.R b/tests/testthat/test-alanwood.R index 29b17c81..977629ba 100644 --- a/tests/testthat/test-alanwood.R +++ b/tests/testthat/test-alanwood.R @@ -4,33 +4,46 @@ context("alanwood") test_that("alanwood, commonname", { skip_on_cran() - comps <- c("Fluazinam", "S-Metolachlor", "xxxxx") + comps <- c("Fluazinam", "S-Metolachlor", "balloon", NA) o1 <- aw_query(comps, type = "commonname") expect_is(o1, "list") - expect_equal(length(o1), 3) + expect_equal(length(o1), 4) + expect_is(o1[[1]], "list") + expect_is(o1[[2]], "list") expect_is(o1[[3]], "list") + expect_is(o1[[4]], "list") expect_equal(o1[["Fluazinam"]]$cas, "79622-59-6") expect_equal(length(o1[["S-Metolachlor"]]$inchikey), 2) expect_equal(length(o1[["S-Metolachlor"]]$inchi), 2) expect_equal(length(o1[["Fluazinam"]]), 11) + expect_true(is.na(o1[["balloon"]]$cname)) + expect_true(is.na(o1[[4]]$cname)) }) test_that("alanwood, cas", { skip_on_cran() - comps <- c("79622-59-6", "87392-12-9", "xxxxx") + comps <- c("79622-59-6", "87392-12-9", "balloon", NA) o1 <- aw_query(comps, type = "cas") expect_is(o1, "list") - expect_equal(length(o1), 3) + expect_equal(length(o1), 4) + expect_is(o1[[1]], "list") + expect_is(o1[[2]], "list") expect_is(o1[[3]], "list") + expect_is(o1[[4]], "list") + expect_equal(mean(names(o1[[1]]) == names(o1[[2]])),1) # check structure + expect_equal(mean(names(o1[[2]]) == names(o1[[3]])),1) # check structure + expect_equal(mean(names(o1[[3]]) == names(o1[[4]])),1) # check structure expect_equal(o1[[1]]$cas, "79622-59-6") expect_equal(length(o1[[2]]$inchikey), 2) expect_equal(length(o1[[2]]$inchi), 2) expect_equal(length(o1[[1]]), 11) expect_true(is.na(aw_query("12071-83-9", type = "cas")[[1]]$inchi)) + expect_true(is.na(o1[["balloon"]]$cname)) + expect_true(is.na(o1[[4]]$cname)) }) test_that("alanwood, build_index", { @@ -48,4 +61,4 @@ test_that("alanwood index is up to date", { skip_on_cran() expect_true(Sys.Date() - attr(aw_idx, "date") < 90) -}) \ No newline at end of file +}) diff --git a/tests/testthat/test-chebi.R b/tests/testthat/test-chebi.R index 0df916ee..497a06f5 100644 --- a/tests/testthat/test-chebi.R +++ b/tests/testthat/test-chebi.R @@ -1,6 +1,7 @@ context('chebi') a <- get_chebiid('Glyphosate', category = 'ALL') +b <- get_chebiid(c("triclosan","glyphosate","balloon",NA)) A <- chebi_comp_entity('CHEBI:27744') B <- chebi_comp_entity('27732') @@ -9,9 +10,13 @@ test_that('chebi returns correct results', { expect_is(a, 'list') expect_is(a[[1]], 'data.frame') + expect_is(b, "list") expect_is(A, 'list') expect_equal(names(a[[1]])[1], 'chebiid') + expect_equal(mean(names(b[[1]])==names(b[[2]])),1) # check structure + expect_equal(mean(names(b[[2]])==names(b[[3]])),1) # check structure + expect_equal(mean(names(b[[3]])==names(b[[4]])),1) # check structure expect_equal(A$`CHEBI:27744`$regnumbers$data[1], '1071-83-6') expect_equal(B$`27732`$properties$chebiasciiname, 'caffeine') expect_equal(B$`27732`$properties$entitystar, '3') From 437bb177f90485dd86f81a1fbc483e1c18719cea Mon Sep 17 00:00:00 2001 From: stitam Date: Fri, 20 Mar 2020 10:02:42 +0000 Subject: [PATCH 2/8] Update match options for get_chebiid() --- R/chebi.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/chebi.R b/R/chebi.R index 9cd8708e..2400f6d5 100644 --- a/R/chebi.R +++ b/R/chebi.R @@ -65,7 +65,7 @@ #' } get_chebiid <- function(query, from = 'ALL', - match = 'all', + match = c("all", "best", "ask", "na"), max_res = 200, stars = 'ALL', verbose = TRUE, From 04afc4f4020cc2d7be6fb3d70ec51cef8d23f34b Mon Sep 17 00:00:00 2001 From: stitam Date: Fri, 20 Mar 2020 10:12:30 +0000 Subject: [PATCH 3/8] Update match.arg() in get_chebiid() --- R/chebi.R | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/R/chebi.R b/R/chebi.R index 2400f6d5..76e430ef 100644 --- a/R/chebi.R +++ b/R/chebi.R @@ -70,7 +70,7 @@ get_chebiid <- function(query, stars = 'ALL', verbose = TRUE, ...) { - + match <- match.arg(match) foo <- function(query, match, from, max_res, stars, verbose, ...) { if (is.na(query)){ return(data.frame(chebiid = NA, @@ -83,8 +83,6 @@ get_chebiid <- function(query, 'AUTOMATIC XREFS', 'FORMULA', 'MASS', 'MONOISOTOPIC MASS', 'CHARGE', 'INCHI/INCHI KEY', 'SMILES', 'SPECIES') from <- match.arg(from, from_all) - match_all <- c('all', 'best', 'ask', 'na') - match <- match.arg(match, match_all) stars_all <- c('ALL', 'TWO ONLY', 'THREE ONLY') stars <- match.arg(stars, stars_all) # query From 450d632a531f11250be7f9522fb6f2732454b74f Mon Sep 17 00:00:00 2001 From: stitam Date: Tue, 24 Mar 2020 15:46:04 +0000 Subject: [PATCH 4/8] Simplify handling of invalid queries in get_chebiid() --- R/chebi.R | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/R/chebi.R b/R/chebi.R index 76e430ef..cd2a5c53 100644 --- a/R/chebi.R +++ b/R/chebi.R @@ -72,12 +72,7 @@ get_chebiid <- function(query, ...) { match <- match.arg(match) foo <- function(query, match, from, max_res, stars, verbose, ...) { - if (is.na(query)){ - return(data.frame(chebiid = NA, - chebiasciiname = NA, - searchscore = NA, - entitystar = NA)) - } + if (is.na(query)) return(data.frame(chebiid = NA)) from_all <- c('ALL', 'CHEBI ID', 'CHEBI NAME', 'DEFINITION', 'ALL NAMES', 'IUPAC NAME', 'CITATIONS', 'REGISTRY NUMBERS', 'MANUAL XREFS', 'AUTOMATIC XREFS', 'FORMULA', 'MASS', 'MONOISOTOPIC MASS', @@ -118,11 +113,7 @@ get_chebiid <- function(query, out <- setNames(out, tolower(names(out))) if (nrow(out) == 0) { message('No result found. \n') - return(data.frame( - chebiid = NA, - chebiasciiname = NA, - searchscore = NA, - entitystar = NA)) + return(data.frame(chebiid = NA)) } if (match == 'all') { return(out) @@ -138,10 +129,7 @@ get_chebiid <- function(query, return(out[out$chebiid == matched, ]) } if (match == 'na') { - return(data.frame(chebiid = NA, - chebiasciiname = NA, - searchscore = NA, - entitystar = NA)) + return(data.frame(chebiid = NA)) } } else { out <- data.frame(chebiid = NA) From ec521e794d459999dc902f8f5ba604bc725d3fa9 Mon Sep 17 00:00:00 2001 From: stitam Date: Tue, 24 Mar 2020 18:00:33 +0000 Subject: [PATCH 5/8] Tidy code update, convert get_chebiid() output to data.frame --- NEWS | 1 + R/chebi.R | 150 +++++++++++++++++++----------------- man/get_chebiid.Rd | 6 +- tests/testthat/test-chebi.R | 32 ++++---- 4 files changed, 99 insertions(+), 90 deletions(-) diff --git a/NEWS b/NEWS index 3122eef3..ea464016 100644 --- a/NEWS +++ b/NEWS @@ -7,6 +7,7 @@ MINOR IMPROVEMENTS BUG FIXES +* get_chebiid() and chebi_comp_entity() fixed for invalid queries [PR #225, fixed by stitam] * get_cid() returned the PubChem ID of sodium when the query was NA [PR #223, fixed by stitam] * aw_query() returned a list for successful queries, NA for unsuccessful queries [PR #222, fixed by stitam] diff --git a/R/chebi.R b/R/chebi.R index cd2a5c53..314f4d66 100644 --- a/R/chebi.R +++ b/R/chebi.R @@ -72,7 +72,9 @@ get_chebiid <- function(query, ...) { match <- match.arg(match) foo <- function(query, match, from, max_res, stars, verbose, ...) { - if (is.na(query)) return(data.frame(chebiid = NA)) + if (is.na(query)) return(data.frame(chebiid = NA_character_, + query = NA_character_, + stringsAsFactors = FALSE)) from_all <- c('ALL', 'CHEBI ID', 'CHEBI NAME', 'DEFINITION', 'ALL NAMES', 'IUPAC NAME', 'CITATIONS', 'REGISTRY NUMBERS', 'MANUAL XREFS', 'AUTOMATIC XREFS', 'FORMULA', 'MASS', 'MONOISOTOPIC MASS', @@ -113,8 +115,12 @@ get_chebiid <- function(query, out <- setNames(out, tolower(names(out))) if (nrow(out) == 0) { message('No result found. \n') - return(data.frame(chebiid = NA)) + return(data.frame(chebiid = NA_character_, + query = query, + stringsAsFactors = FALSE)) } + if (nrow(out) > 0) out$query <- query + if (nrow(out) == 1) return(out) if (match == 'all') { return(out) } @@ -129,10 +135,14 @@ get_chebiid <- function(query, return(out[out$chebiid == matched, ]) } if (match == 'na') { - return(data.frame(chebiid = NA)) + return(data.frame(chebiid = NA_character_, + query = query, + stringsAsFactors = FALSE)) } } else { - out <- data.frame(chebiid = NA) + out <- data.frame(chebiid = NA_character_, + query = query, + stringsAsFactors = FALSE) message('Returning NA (', http_status(res)$message, '). \n') return(out) @@ -146,7 +156,7 @@ get_chebiid <- function(query, stars = stars, verbose = verbose) out <- setNames(out, query) - + out <- bind_rows(out) return(out) } @@ -344,95 +354,95 @@ rbind_named_fill <- function(x) { #' chebi_comp_entity() output element. This is used in chebi_comp_entity() to #' provide a valid output for invalid inputs and allow vectorisation. #' @noRd -#' @autor Tamas Stirling, \email{stirling.tamas@@gmail.com} +#' @author Tamas Stirling, \email{stirling.tamas@@gmail.com} empty_chebi_comp_entity <- function() { properties <- data.frame( - chebiid = as.character(NA), - chebiasciiname = as.character(NA), - definition = as.character(NA), - status = as.character(NA), - smiles = as.character(NA), - inchi = as.character(NA), - inchikey = as.character(NA), - charge = as.character(NA), - mass = as.character(NA), - monoisotopicmass = as.character(NA), - entitystar = as.character(NA) + chebiid = NA_character_, + chebiasciiname = NA_character_, + definition = NA_character_, + status = NA_character_, + smiles = NA_character_, + inchi = NA_character_, + inchikey = NA_character_, + charge = NA_character_, + mass = NA_character_, + monoisotopicmass = NA_character_, + entitystar = NA_character_ ) chebiid_snd <- data.frame( - chebiids = as.character(NA) + chebiids = NA_character_ ) chem_structure <- list( - list("structure" = list(as.character(NA)), - "type" = list(as.character(NA)), - "dimension" = list(as.character(NA)), - "defaultStructure" = list(as.character(NA))) + list("structure" = list(NA_character_), + "type" = list(NA_character_), + "dimension" = list(NA_character_), + "defaultStructure" = list(NA_character_)) ) synonyms <- data.frame( - data = as.character(NA), - type = as.character(NA), - source = as.character(NA) + data = NA_character_, + type = NA_character_, + source = NA_character_ ) iupacnames <- data.frame( - data = as.character(NA), - type = as.character(NA), - source = as.character(NA) + data = NA_character_, + type = NA_character_, + source = NA_character_ ) formulae <- data.frame( - data = as.character(NA), - source = as.character(NA) + data = NA_character_, + source = NA_character_ ) regnumbers <- data.frame( - data = as.character(NA), - type = as.character(NA), - source = as.character(NA) + data = NA_character_, + type = NA_character_, + source = NA_character_ ) citations <- data.frame( - data = as.character(NA), - type = as.character(NA), - source = as.character(NA) + data = NA_character_, + type = NA_character_, + source = NA_character_ ) dblinks <- data.frame( - data = as.character(NA), - type = as.character(NA) + data = NA_character_, + type = NA_character_ ) parents <- data.frame( - chebiName = as.character(NA), - chebiId = as.character(NA), - type = as.character(NA), - status = as.character(NA), - cyclicRelationship = as.character(NA) + chebiName = NA_character_, + chebiId = NA_character_, + type = NA_character_, + status = NA_character_, + cyclicRelationship = NA_character_ ) children <- data.frame( - chebiName = as.character(NA), - chebiId = as.character(NA), - type = as.character(NA), - status = as.character(NA), - cyclicRelationship = as.character(NA) + chebiName = NA_character_, + chebiId = NA_character_, + type = NA_character_, + status = NA_character_, + cyclicRelationship = NA_character_ ) comments <- data.frame( - text = as.character(NA), - date = as.character(NA) + text = NA_character_, + date = NA_character_ ) origins <- data.frame( - speciesText = as.character(NA), - speciesAccession = as.character(NA), - SourceType = as.character(NA), - SourceAccession = as.character(NA), - componentText = as.character(NA), - componentAccession = as.character(NA) + speciesText = NA_character_, + speciesAccession = NA_character_, + SourceType = NA_character_, + SourceAccession = NA_character_, + componentText = NA_character_, + componentAccession = NA_character_ ) - return(list("properties" = properties, - "chebiid_snd" = chebiid_snd, - "chem_structure" = chem_structure, - "synonyms" = synonyms, - "iupacnames" = iupacnames, - "formulae" = formulae, - "regnumbers" = regnumbers, - "citations" = citations, - "dblinks" = dblinks, - "parents" = parents, - "children" = children, - "comments" = comments, - "origins" = origins)) -} \ No newline at end of file + return(list(properties = properties, + chebiid_snd = chebiid_snd, + chem_structure = chem_structure, + synonyms = synonyms, + iupacnames = iupacnames, + formulae = formulae, + regnumbers = regnumbers, + citations = citations, + dblinks = dblinks, + parents = parents, + children = children, + comments = comments, + origins = origins)) +} diff --git a/man/get_chebiid.Rd b/man/get_chebiid.Rd index 99edceac..65d0926d 100644 --- a/man/get_chebiid.Rd +++ b/man/get_chebiid.Rd @@ -7,7 +7,7 @@ get_chebiid( query, from = "ALL", - match = "all", + match = c("all", "best", "ask", "na"), max_res = 200, stars = "ALL", verbose = TRUE, @@ -64,8 +64,8 @@ get_chebiid(comp) \references{ Hastings J, Owen G, Dekker A, Ennis M, Kale N, Muthukrishnan V, Turner S, Swainston N, Mendes P, Steinbeck C. (2016). ChEBI in 2016: - Improved services and an expanding collection of metabfolites. Nucleic Acids - Res. + Improved services and an expanding collection of metabfolites. Nucleic + Acids Res. Hastings, J., de Matos, P., Dekker, A., Ennis, M., Harsha, B., Kale, N., Muthukrishnan, V., Owen, G., Turner, S., Williams, M., and Steinbeck, C. diff --git a/tests/testthat/test-chebi.R b/tests/testthat/test-chebi.R index 497a06f5..c3117241 100644 --- a/tests/testthat/test-chebi.R +++ b/tests/testthat/test-chebi.R @@ -1,23 +1,21 @@ -context('chebi') +context("chebi") -a <- get_chebiid('Glyphosate', category = 'ALL') -b <- get_chebiid(c("triclosan","glyphosate","balloon",NA)) -A <- chebi_comp_entity('CHEBI:27744') -B <- chebi_comp_entity('27732') +a <- get_chebiid("Glyphosate", from = "ALL") +b <- get_chebiid(c("triclosan", "glyphosate", "balloon", NA)) +A <- chebi_comp_entity("CHEBI:27744") +B <- chebi_comp_entity("27732") -test_that('chebi returns correct results', { +test_that("chebi returns correct results", { skip_on_cran() - expect_is(a, 'list') - expect_is(a[[1]], 'data.frame') - expect_is(b, "list") - expect_is(A, 'list') + expect_is(a, "data.frame") + expect_is(b, "data.frame") + expect_is(A, "list") - expect_equal(names(a[[1]])[1], 'chebiid') - expect_equal(mean(names(b[[1]])==names(b[[2]])),1) # check structure - expect_equal(mean(names(b[[2]])==names(b[[3]])),1) # check structure - expect_equal(mean(names(b[[3]])==names(b[[4]])),1) # check structure - expect_equal(A$`CHEBI:27744`$regnumbers$data[1], '1071-83-6') - expect_equal(B$`27732`$properties$chebiasciiname, 'caffeine') - expect_equal(B$`27732`$properties$entitystar, '3') + expect_equal(names(a)[1], "chebiid") + expect_length(names(a), 5) + expect_length(names(b), 5) + expect_equal(A$`CHEBI:27744`$regnumbers$data[1], "1071-83-6") + expect_equal(B$`27732`$properties$chebiasciiname, "caffeine") + expect_equal(B$`27732`$properties$entitystar, "3") }) From 9f45297b1d6ef6cda1e1dd39b5d34864160b4e69 Mon Sep 17 00:00:00 2001 From: stitam Date: Wed, 25 Mar 2020 11:11:23 +0000 Subject: [PATCH 6/8] Simplified invalid input handling --- R/alanwood.R | 12 +--- R/chebi.R | 103 +-------------------------------- tests/testthat/test-alanwood.R | 7 --- tests/testthat/test-chebi.R | 1 + 4 files changed, 4 insertions(+), 119 deletions(-) diff --git a/R/alanwood.R b/R/alanwood.R index c69e24ac..a4649168 100644 --- a/R/alanwood.R +++ b/R/alanwood.R @@ -56,17 +56,7 @@ aw_query <- function(query, type = c("commonname", "cas"), verbose = TRUE, if (is.na(query)) takelink <- vector() if (length(takelink) == 0) { message("Not found! Returning NA.\n") - return(list(cname = NA, - status = NA, - pref_iupac_name = NA, - iupac_name = NA, - cas = NA, - formula = NA, - activity = NA, - subactivity = NA, - inchikey = NA, - inchi = NA, - source_url = NA)) + return(list()) } if (length(takelink) > 1) { takelink <- unique(takelink) diff --git a/R/chebi.R b/R/chebi.R index 314f4d66..72f9184a 100644 --- a/R/chebi.R +++ b/R/chebi.R @@ -219,7 +219,7 @@ chebi_comp_entity <- function(chebiid, verbose = TRUE, ...) { foo <- function(chebiid, verbose, ...) { # chebiid = c('CHEBI:27744', 'CHEBI:17790'); verbose = TRUE # debuging - if (is.na(chebiid)) return(empty_chebi_comp_entity()) + if (is.na(chebiid)) return(list()) url <- 'http://www.ebi.ac.uk:80/webservices/chebi/2.0/webservice' headers <- c(Accept = 'text/xml', Accept = 'multipart/*', @@ -244,7 +244,7 @@ chebi_comp_entity <- function(chebiid, verbose = TRUE, ...) { body = body) if (res$status_code != 200) { warning(http_status(res)$message) - return(empty_chebi_comp_entity()) + return(list()) } else { cont <- content(res, type = 'text/xml', encoding = 'utf-8') # restricted to one entry @@ -347,102 +347,3 @@ rbind_named_fill <- function(x) { } setNames(as.data.frame(do.call(rbind, out), stringsAsFactors = FALSE), unam) } - -#' Create empty list for chebi_comp_entity -#' -#' The function creates a list with identical internal structure as a -#' chebi_comp_entity() output element. This is used in chebi_comp_entity() to -#' provide a valid output for invalid inputs and allow vectorisation. -#' @noRd -#' @author Tamas Stirling, \email{stirling.tamas@@gmail.com} -empty_chebi_comp_entity <- function() { - properties <- data.frame( - chebiid = NA_character_, - chebiasciiname = NA_character_, - definition = NA_character_, - status = NA_character_, - smiles = NA_character_, - inchi = NA_character_, - inchikey = NA_character_, - charge = NA_character_, - mass = NA_character_, - monoisotopicmass = NA_character_, - entitystar = NA_character_ - ) - chebiid_snd <- data.frame( - chebiids = NA_character_ - ) - chem_structure <- list( - list("structure" = list(NA_character_), - "type" = list(NA_character_), - "dimension" = list(NA_character_), - "defaultStructure" = list(NA_character_)) - ) - synonyms <- data.frame( - data = NA_character_, - type = NA_character_, - source = NA_character_ - ) - iupacnames <- data.frame( - data = NA_character_, - type = NA_character_, - source = NA_character_ - ) - formulae <- data.frame( - data = NA_character_, - source = NA_character_ - ) - regnumbers <- data.frame( - data = NA_character_, - type = NA_character_, - source = NA_character_ - ) - citations <- data.frame( - data = NA_character_, - type = NA_character_, - source = NA_character_ - ) - dblinks <- data.frame( - data = NA_character_, - type = NA_character_ - ) - parents <- data.frame( - chebiName = NA_character_, - chebiId = NA_character_, - type = NA_character_, - status = NA_character_, - cyclicRelationship = NA_character_ - ) - children <- data.frame( - chebiName = NA_character_, - chebiId = NA_character_, - type = NA_character_, - status = NA_character_, - cyclicRelationship = NA_character_ - ) - comments <- data.frame( - text = NA_character_, - date = NA_character_ - ) - origins <- data.frame( - speciesText = NA_character_, - speciesAccession = NA_character_, - SourceType = NA_character_, - SourceAccession = NA_character_, - componentText = NA_character_, - componentAccession = NA_character_ - ) - return(list(properties = properties, - chebiid_snd = chebiid_snd, - chem_structure = chem_structure, - synonyms = synonyms, - iupacnames = iupacnames, - formulae = formulae, - regnumbers = regnumbers, - citations = citations, - dblinks = dblinks, - parents = parents, - children = children, - comments = comments, - origins = origins)) -} diff --git a/tests/testthat/test-alanwood.R b/tests/testthat/test-alanwood.R index 977629ba..d64a9d29 100644 --- a/tests/testthat/test-alanwood.R +++ b/tests/testthat/test-alanwood.R @@ -17,8 +17,6 @@ test_that("alanwood, commonname", { expect_equal(length(o1[["S-Metolachlor"]]$inchikey), 2) expect_equal(length(o1[["S-Metolachlor"]]$inchi), 2) expect_equal(length(o1[["Fluazinam"]]), 11) - expect_true(is.na(o1[["balloon"]]$cname)) - expect_true(is.na(o1[[4]]$cname)) }) @@ -34,16 +32,11 @@ test_that("alanwood, cas", { expect_is(o1[[2]], "list") expect_is(o1[[3]], "list") expect_is(o1[[4]], "list") - expect_equal(mean(names(o1[[1]]) == names(o1[[2]])),1) # check structure - expect_equal(mean(names(o1[[2]]) == names(o1[[3]])),1) # check structure - expect_equal(mean(names(o1[[3]]) == names(o1[[4]])),1) # check structure expect_equal(o1[[1]]$cas, "79622-59-6") expect_equal(length(o1[[2]]$inchikey), 2) expect_equal(length(o1[[2]]$inchi), 2) expect_equal(length(o1[[1]]), 11) expect_true(is.na(aw_query("12071-83-9", type = "cas")[[1]]$inchi)) - expect_true(is.na(o1[["balloon"]]$cname)) - expect_true(is.na(o1[[4]]$cname)) }) test_that("alanwood, build_index", { diff --git a/tests/testthat/test-chebi.R b/tests/testthat/test-chebi.R index c3117241..5e51426d 100644 --- a/tests/testthat/test-chebi.R +++ b/tests/testthat/test-chebi.R @@ -11,6 +11,7 @@ test_that("chebi returns correct results", { expect_is(a, "data.frame") expect_is(b, "data.frame") expect_is(A, "list") + expect_is(B, "list") expect_equal(names(a)[1], "chebiid") expect_length(names(a), 5) From 6547f3e6ac926396a4f2f9c4aaab809f606a9b9b Mon Sep 17 00:00:00 2001 From: stitam Date: Wed, 25 Mar 2020 12:03:12 +0000 Subject: [PATCH 7/8] Add common extractors to alanwood and chebi --- NAMESPACE | 4 ++++ R/alanwood.R | 2 +- R/chebi.R | 6 +++--- R/extractors.R | 41 +++++++++++++++++++++++++++++++++++------ 4 files changed, 43 insertions(+), 10 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index 5353146f..5f1b70b6 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,8 +1,11 @@ # Generated by roxygen2: do not edit by hand +S3method(cas,chebi_comp_entity) S3method(cas,default) S3method(cas,pan_query) S3method(cas,wd_ident) +S3method(inchikey,aw_query) +S3method(inchikey,chebi_comp_entity) S3method(inchikey,cs_compinfo) S3method(inchikey,cs_extcompinfo) S3method(inchikey,default) @@ -12,6 +15,7 @@ S3method(inchikey,pan_query) S3method(inchikey,pc_prop) S3method(inchikey,wd_ident) S3method(smiles,aw_query) +S3method(smiles,chebi_comp_entity) S3method(smiles,cs_compinfo) S3method(smiles,cs_extcompinfo) S3method(smiles,cts_compinfo) diff --git a/R/alanwood.R b/R/alanwood.R index a4649168..ae6e7333 100644 --- a/R/alanwood.R +++ b/R/alanwood.R @@ -56,7 +56,7 @@ aw_query <- function(query, type = c("commonname", "cas"), verbose = TRUE, if (is.na(query)) takelink <- vector() if (length(takelink) == 0) { message("Not found! Returning NA.\n") - return(list()) + return(NA) } if (length(takelink) > 1) { takelink <- unique(takelink) diff --git a/R/chebi.R b/R/chebi.R index 72f9184a..df608b80 100644 --- a/R/chebi.R +++ b/R/chebi.R @@ -219,7 +219,7 @@ chebi_comp_entity <- function(chebiid, verbose = TRUE, ...) { foo <- function(chebiid, verbose, ...) { # chebiid = c('CHEBI:27744', 'CHEBI:17790'); verbose = TRUE # debuging - if (is.na(chebiid)) return(list()) + if (is.na(chebiid)) return(NA) url <- 'http://www.ebi.ac.uk:80/webservices/chebi/2.0/webservice' headers <- c(Accept = 'text/xml', Accept = 'multipart/*', @@ -244,7 +244,7 @@ chebi_comp_entity <- function(chebiid, verbose = TRUE, ...) { body = body) if (res$status_code != 200) { warning(http_status(res)$message) - return(list()) + return(NA) } else { cont <- content(res, type = 'text/xml', encoding = 'utf-8') # restricted to one entry @@ -304,7 +304,7 @@ chebi_comp_entity <- function(chebiid, verbose = TRUE, ...) { } out <- lapply(chebiid, foo, verbose = verbose) out <- setNames(out, chebiid) - + class(out) <- c("chebi_comp_entity","list") return(out) } diff --git a/R/extractors.R b/R/extractors.R index 7c24a412..8c4605b0 100644 --- a/R/extractors.R +++ b/R/extractors.R @@ -9,7 +9,6 @@ cas <- function(x, ...){ UseMethod("cas") } - #' @export cas.default <- function(x, ...) { sapply(x, function(y) { @@ -19,6 +18,14 @@ cas.default <- function(x, ...) { }) } +#' @export +cas.chebi_comp_entity <- function(x, ...) { + sapply(x, function(y) { + if (length(y) == 1 && is.na(y)) return(NA) + unique(y$regnumbers$data[y$regnumbers$type == "CAS Registry Number"]) + }) +} + #' @export cas.pan_query <- function(x, ...) { sapply(x, function(y) y$`CAS Number`) @@ -29,18 +36,34 @@ cas.wd_ident <- function(x, ...) { x$cas } - - # InChIKey ---------------------------------------------------------------- #' @rdname extractors #' @export inchikey <- function(x, ...){ UseMethod("inchikey") } + #' @export inchikey.default <- function(x, ...) { sapply(x, function(y) y$inchikey) } + +#' @export +inchikey.aw_query <- function(x, ...) { + sapply(x, function(y) { + if (length(y) == 1 && is.na(y)) return(NA) + y$inchikey + }) +} + +#' @export +inchikey.chebi_comp_entity <- function(x, ...) { + sapply(x, function (y) { + if (length(y) == 1 && is.na(y)) return(NA) + y$properties$inchikey + }) +} + #' @export inchikey.cs_compinfo <- function(x, ...) { x$inchikey @@ -60,7 +83,6 @@ inchikey.pan_query <- function(x, ...) { stop("InChIkey is not returned by this datasource!") } - #' @export inchikey.opsin_query <- function(x, ...) { x$stdinchikey @@ -79,18 +101,26 @@ inchikey.wd_ident <- function(x, ...) { x$inchikey } - # SMILES ------------------------------------------------------------------ #' @rdname extractors #' @export smiles <- function(x, ...){ UseMethod("smiles") } + #' @export smiles.default <- function(x, ...) { sapply(x, function(y) y$smiles) } +#' @export +smiles.chebi_comp_entity <- function(x, ...) { + sapply(x, function(y) { + if (length(y) == 1 && is.na(y)) return(NA) + y$properties$smiles + }) +} + #' @export smiles.cs_compinfo <- function(x, ...) { x$smiles @@ -137,4 +167,3 @@ smiles.pc_prop <- function(x, ...) { smiles.wd_ident <- function(x, ...) { x$smiles } - From 3c39da39f6a2251f90f9664ee4254ed97964047e Mon Sep 17 00:00:00 2001 From: stitam Date: Wed, 25 Mar 2020 12:50:21 +0000 Subject: [PATCH 8/8] Add NA handling to CONTRIBUTING.md --- CONTRIBUTING.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d301a4a8..bf059b5f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -48,13 +48,13 @@ We do not have strong guidelines for code contributions and are happy to help at Some consistency guidelines: -8. Functions that query a database for one or more database specific identifiers should follow the naming convention `get_*`, e.g. the function that queries ChEBI IDs is called `get_chebiid()`. +8. Functions that query a database for one or more database specific identifiers should follow the naming convention `get_*`, e.g. the function that queries ChEBI IDs is called `get_chebiid()`. These functions should take a vector of queries and return a single [tibble](https://cran.r-project.org/web/packages/tibble/index.html). Whenever possible these functions should have arguments `query`, `from`, `match`, `verbose` and `...`. The first column of the tibble should contain the ID-s and the last should contain the queries. Invalid queries should return a row of NA-s (apart from the last element of the row which should be the query itself). -9. The naming of functions that query a database for chemical information should start with the name of the database, followed by the functionality, e.g. `pc_synonyms()` searches for synonyms in PubChem. +9. The naming of functions that query a database for chemical information should start with the name of the database, followed by the functionality, e.g. `pc_synonyms()` searches for synonyms in PubChem. These functions should take a vector of queries and return a list of responses. Invalid queries should return `NA`. 10. Functions should always validate their input when appropriate. Use `match.arg()` for input validation. -11. Functions should always return the same output structure, even for invalid inputs, e.g. unknown chemicals, or `NA`. Make sure `NA` is not confused with sodium. Include tests. +11. Make sure `NA` is not confused with sodium. ### Data Sources