pubmed API とやり取りして 100 の出版物に関連付けられた xml ファイルを取得する関数を作成しようとしています。次に、xml ファイルを個別に解析して、各出版物のタイトルと各出版物の要約を取得します。Rentrez パッケージを使用して API と対話し、必要な xml ファイルを正常に取得しました。私は xml パッケージを使用して xml ファイルを解析しており、Xpath 式が必要なデータを取得することを確認しています。実際には、他のフィールド (ジャーナル タイトル、メッシュ用語など) からデータを取得しようとしていますが、ここのこのステップで行き詰っています)
ただし、このデータをデータ フレームに移動するための適切な for ループを作成できませんでした。コードを実行すると、次のエラーが表示されます。
error in $<-.data.frame
( *tmp*
, "Abstract", value = list("text of abstract"): 置換は 1 行、データは 0
タイトル情報を取得する関数をテストすると (抽象的な情報を取得する式を削除して)、必要なタイトルに関する情報が含まれていない空のデータ フレームが返されます。しかし、エラーメッセージはありません。
pubmed_parsed("Kandel+Eric", n=2) を実行すると、私の目標は、「ATitle」列の 2 つのタイトルからの文字ベクトルを含むデータ フレームを受け取ることです (タイトル:「レトロトランスポゾンのサイレンシングにおける小さなノンコーディング RNA の役割」哺乳類の脳内」および「ApCPEBのホモログを含む非プリオンドメインであるApCPEB4は、長期的な促進の開始に関与しています」)。そして、2 つのアブストラクトからの文字ベクトルは、「アブストラクト」列に対応して表示されます (アブストラクトの一部:「Piwi 相互作用 RNA (piRNA)、長い間グレムリンに限定されると考えられていました...」、「2 つの薬理学的に異なるタイプのローカルタンパク質合成は、シナプス特異的に必要とされる...")。
library(xml)
library(rentrez)
pubmed_parsed <- function(term, n=100){
df <- data.frame(ATitle = character(), JTitle = character(), MeshTerms = character(), Abstract = character(), FAuthor = character(), LAuthor = character(), stringsAsFactors = FALSE)
IdList <- entrez_search(db = "pubmed", term = term, retmode = "xml", retmax = n)
for (i in 1:n){
XmlFile <- entrez_fetch(db = "pubmed", id=IdList$ids[i], rettype = "xml", retmode = "xml", parsed=TRUE)
Parsed <- xmlRoot(XmlFile)
df$ATitle[i] <- xpathSApply(Parsed, "/PubmedArticleSet/PubmedArticle/MedlineCitation/Article/Title", xmlValue, simplify = FALSE)
df$Abstract[i] <- xpathSApply(Parsed, "/PubmedArticleSet/PubmedArticle/MedlineCitation/Article/Title", xmlValue, simplify = FALSE)
}
df
}