我想創建一個函數,與pubmed API進行交互,以檢索與100個出版物相關的xml文件。然後,我想分別解析xml文件以檢索每個出版物的標題和每個出版物的摘要。我正在使用Rentrez軟件包與api進行交互,併成功檢索了必要的xml文件。我正在使用xml包來解析xml文件,並驗證了Xpath表達式檢索我想要的數據。事實上,我期待從其他領域獲取數據(期刊名稱,網格術語等,但我堅持在這一步這裏)從for循環存儲數據幀中的數據
但是,我還沒有能夠創建一個適當的循環移動將這些數據轉換成數據幀。我收到以下錯誤運行我的代碼:
錯誤$<-.data.frame
(*tmp*
,「摘要」,值=名單(「抽象的文字」): 更換具有1行,數據具有0
當我測試函數接收標題信息(通過刪除表達式來檢索抽象信息),我收到一個空的數據框,但沒有關於我想要的標題的信息,但是沒有錯誤信息然後
如果我執行pubmed_parsed (「Kandel + Eric」,n = 2),我的目標是從列「ATitle」中的兩個標題的字符向量中接收數據幀(標題:「角色f或在哺乳動物大腦沉默逆轉錄轉座子中的小非編碼RNA「和」ApCPEB4,含有ApCPEB的非朊病毒結構域同源物,參與啓動長期促進「)。並且來自兩個摘要的字符矢量相應地出現在「摘要」(摘要的部分:「Piwi相互作用RNA(piRNA),長期以來被認爲僅限於gremlin ...」,「兩種藥理學上不同類型的局部蛋白質合成需要突觸特異性......「)。
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
}
請包括庫報表和其他任何使這種重複性 –
我已經在相應的庫語句添加必要的,我想從一個正確構建「pubmed_parsed」功能得到什麼的例子。謝謝。 – KevinF
注意:'library(XML)'全部大寫。 R區分大小寫! – Parfait