Преобразование идентификатора CID из реестра CAS в Pubchem в R
Раздражающая проблема, с которой сталкиваются многие химики, заключается в преобразовании регистрационных номеров химических соединений CAS (хранящихся в какой-либо коммерческой базе данных, которая недоступна) в идентификаторы Pubchem (открытые). Тип Pubchem поддерживает преобразование между ними, но только через их ручной веб-интерфейс, а не через официальный программный интерфейс PUG REST.
Решение на Ruby приведено здесь на основе интерфейса электронных утилит: http://depth-first.com/articles/2007/09/13/hacking-pubchem-convert-cas-numbers-into-pubchem-cids-with-ruby/
Кто-нибудь знает, как это перевести на R?
РЕДАКТИРОВАТЬ: на основе ответа ниже, наиболее элегантное решение:
library(XML)
library(RCurl)
CAStocids=function(query) {
xmlresponse = xmlParse( getURL(paste("http://www.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pccompound&retmax=100&term=",query,sep="") ) )
cids = sapply(xpathSApply(xmlresponse, "//Id"), function(n){xmlValue(n)})
return(cids)
}
> CAStocids("64318-79-2")
[1] "6434870" "5282237"
ура, Том
2 ответа
Вот как это делает код Ruby, переведенный на R RCurl
а также XML
:
> xmlresponse = xmlParse( getURL("http://www.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pccompound&retmax=100&term=64318-79-2") )
и вот как извлечь узлы Id:
> sapply(xpathSApply(xmlresponse, "//Id"), function(n){xmlValue(n)})
[1] "6434870" "5282237"
обернуть все это в функцию....
convertU = function(query){
xmlresponse = xmlParse(getURL(
paste0("http://www.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pccompound&retmax=100&term=",query)))
sapply(xpathSApply(xmlresponse, "//Id"), function(n){xmlValue(n)})
}
> convertU("64318-79-2")
[1] "6434870" "5282237"
> convertU("64318-79-1")
list()
> convertU("64318-78-2")
list()
> convertU("64313-78-2")
[1] "313"
возможно, нужен тест, если не найден.
Я думаю, что вы все равно сможете конвертировать номера CAS в идентификаторы PubChem, используя PUG, где вместо имени соединения вы вводите номер CAS. Конечно, это может быть не так конкретно, если числа CAS перекрываются. Я не проверял это.
Пример с аспирином https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/name/50-78-2/cids/JSON