0

xmlValueNCBI xml ファイルから特定の子ノードを解析しようとしています。ただし、一部の PM.ID については、公開されたレコードとRoot node <PubmedArticleSet>は異なる情報を持っています。条件を渡し、特定の値を抽出して他の値を抽出したいと思います。最後に、PMID に対応する両方の値を使用して を作成します。簡単に思えますが、エラーがスローされますPubmedBookArticlePubmedArticleif(xmlName(fetch.pubmed) == PubmedBookArticleelseif (xmlName(fetch.pubmed) == PubmedArticledataframe(xmlName(fetch.pubmed)no applicable method for 'xmlName' applied to an object of class "c('XMLInternalDocument', 'XMLAbstractDocument')"

<?xml version="1.0"?>
<!DOCTYPE PubmedArticleSet PUBLIC "-//NLM//DTD PubMedArticle, 1st January 2015//EN" "http://www.ncbi.nlm.nih.gov/corehtml/query/DTD/pubmed_150101.dtd">
<PubmedArticleSet>
  <PubmedBookArticle>
    <BookDocument>
      <PMID Version="1">25506969</PMID>
      <ArticleIdList>
        <ArticleId IdType="bookaccession">NBK259188</ArticleId>
      </ArticleIdList> ....

   ...... </BookDocument>
  </PubmedBookArticle>

  <PubmedArticle>
    <MedlineCitation Status="Publisher" Owner="NLM">
      <PMID Version="1">25013473</PMID>
      <DateCreated>
        <Year>2014</Year>
        <Month>7</Month>
        <Day>11</Day>
      </DateCreated>....

    ....</MedlineCitation>
    </PubmedArticle>
</PubmedArticleSet>

私のコードは以下です

library(XML)
library(rentrez)

PM.ID <- c("25506969"," 25032371","   24983039","24983034","24983032","24983031",
"26386083","26273372","26066373","25837167",
 "25466451","25013473")
# rentrez function to retrieve XMl file for above PIMD
fetch.pubmed <- entrez_fetch(db = "pubmed", id = PM.ID,
                             rettype = "xml", parsed = T)
# If empty records, return NA
FindNull <- function(x,x1child){
  res <- xpathSApply(x,x1child,xmlValue)
  if (length(res) == 0){
    out <- NA
  }else {
    out <- res
  }
  out
}

# extract contents from xml file
    xpathSApply(fetch.pubmed,"//PubmedArticle",FindNull,x1child = './/ArticleTitle')

    xpathSApply(fetch.pubmed,"//PubmedBookArticle",FindNull,x1child = './/BookTitle')

各検索で条件が満たされたときに PubmedArticle と PubmedBookArticle 内の値を取得できるように、上記のコードをループで取得するにはどうすればよいですか?

4

2 に答える 2

1

これを行う方法はいくつかありますが、書籍と記事用に別々のノード セットを取得することもできます。

table( xpathSApply(fetch.pubmed, "/PubmedArticleSet/*", xmlName) )
    PubmedArticle PubmedBookArticle 
                6                 6 

books <- getNodeSet(fetch.pubmed, "/PubmedArticleSet/PubmedBookArticle")

data.frame( pmid = sapply(books, function(x) xpathSApply(x, ".//PMID", xmlValue)),
           title = sapply(books, function(x) xpathSApply(x, ".//BookTitle", xmlValue))
)

      pmid                                                                                                      title
1 25506969                                                     Probe Reports from the NIH Molecular Libraries Program
2 25032371                                                       Understanding Climate’s Influence on Human Evolution
3 24983039 Assessing the Effects of the Gulf of Mexico Oil Spill on Human Health: A Summary of the June 2010 Workshop
4 24983034                                                  In the Light of Evolution: Volume IV: The Human Condition
5 24983032                                            The Role of Human Factors in Home Health Care: Workshop Summary
于 2015-11-04T15:53:43.573 に答える
0
  • 以下の NCBI XML パスは、これらの記事だけでなく、からのabstracts抽出にも役立ちます。PubmedArticlePubmedBookArticlewithout abstracts (NA)

    <!-- language: lang-r -->
    abstracts <- xpathSApply(fetch.pubmed, c('//PubmedArticle//Article',
             '//PubmedBookArticle//Abstract'), function(x) {
    xmlValue(xmlChildren(x)$Abstract) })
    abstracts <- data.frame(abstracts,stringsAsFactors = F)
    dim(abstracts)
    rownames(abstracts) <- PM.ID
    
于 2016-01-19T18:01:10.513 に答える