2012-02-08 9 views
4

変数 "varname"の値にXMLパッケージを使用して大量のxmlファイルを解析しています。私が使用していたコードは次のとおりです。ループを使用しないXMLファイルの解析?

library(XML) 
a = xmlTreeParse("/path/filename.xml") 
r = xmlRoot(a) 
namelist = list() 
for(i in 1:xmlSize(r)){namelist[[i]] <- xmlValue(xmlChildren(r[[i]])$varname)} 

これを実行するのに長い時間がかかっているので、私は並列処理を試してみました:

library(foreach) 
library(doMC) 
registerDoMC() 
namelist = list() 
namelist <- foreach(i = 1:xmlSize(r)) %dopar% {namelist[[i]] <- xmlValue(xmlChildren(r[[i]])$varname)} 

これは高速ですが、それでも十分な大きさのために私のマシンをフリーズされますファイル。この問題を回避する方法はありますか?

+2

あなたは大規模な文書のために非効率的である 、文書全体のためのDOMツリーを構築している: が明示的に物事をスピードアップすることがあり、必要な情報を抽出し、他のすべてを廃棄する 'xmlTreeParse'の' handlers'引数を設定します。 –

+0

Vincent ...申し訳ありませんが、私はXMLに慣れておらず、Rのドキュメントとともに混乱しています。サンプルコードを提供してください。ありがとう。 – user702432

+1

あなたのデータがどのようなものであるかについての詳細は何もなく、より具体的にするのは難しいです。 ここでは、ドキュメントの一例を示します(簡略化しています)。 'fileName < - system.file(" exampleData "、" mtcars.xml "、package =" XML "); r < - 文字(0)。 f < - function(x、attrs){r << - c(r、xmlValue(x [[1]])); TRUE}; xmlTreeParse(fileName、ハンドラ=リスト(変数= f)、asTree = FALSE); r' –

答えて

2

質問のオリジナルポスターで述べたように:この記事を読んだ人には


:最も簡単な解決策はXMLライブラリ内xmlToDataFrame関数に表示されます。私の場合は、xmlファイルの読み込みについてマイナーな微調整だけが必要です。強くお勧めします。謝罪私は質問を掲示した後でしかこれを見つけませんでした。

関連する問題