我想从扑热息痛的PubChem-API中读取JSON数据并提取其中存储的18.1.2 ChEBI Ontology信息(请参见屏幕截图)。
即:我想获取每个角色的全部信息(即应用,生物学角色和化学作用)在R中的列表结构中。
为此,我通过API获取数据并将其转换为R对象(chebi
)。到目前为止一切顺利。
require(httr)
require(jsonlite)
require(data.tree)
# from JSON to R list
qurl = 'https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/cid/classification/JSON?classification_type=simple'
cid = 1983
post = POST(qurl, body = list("cid" = paste(cid, collapse = ',')))
cont_json = try(content(post, type = 'text', encoding = 'UTF-8'), silent = FALSE)
cont = fromJSON(cont_json, simplifyDataFrame = FALSE)
# subset list (i.e. get CHEBI data)
cont_l = cont$Hierarchies$Hierarchy
idx = which(sapply(cont_l, function(x) x$SourceName == 'ChEBI'))
chebi = cont_l[[idx]]
然后从chebi
对象中,我想要检索每个角色(即 application , biological role , 化学作用)包含。
(1)我的第一个想法是简单地提取Name信息。但是,然后我松开了数据的树状结构,不知道什么属于哪个角色。
ch_node = chebi$Node
sapply(ch_node, function(x) x$Information$Name)
(2)其次,我看到有data.tree
软件包。但是我不知道如何正确转换chebi
对象。
chebi_tree = as.Node(ch_node) #?
问题:如何从chebi
对象获得角色信息到R中的列表中,而又不会丢失树状结构?