私はメモリに巨大なXMLファイルを読み取るためにxml2
パッケージを使用していますを作成しようと、コマンドは次のエラーで失敗します。問題XML2パッケージで大きなXMLファイルを読み込み、作業閉鎖
Error: Char 0x0 out of allowed range [9]
私のコード次のようになります。
library(xml2)
doc <- read_xml('~/Downloads/FBrf.xml')
データは(140メガバイト程度)ftp://ftp.flybase.net/releases/FB2015_05/reporting-xml/FBrf.xml.gzでダウンロードし、それが1.8ギガバイトについて持って展開することができます。
誰かに、問題のある文字やファイルを読む前にどのように消去するかを知る方法があります。
[OK]を
EDIT、ファイルがかなり大きいので、私は、スタックオーバーフロー上の他のソリューションを検索し、私がやっていること、彼はそうここCombine values in huge XML-files
を提示マーティンモーガンからソリューションを実装しようこれまでのところ、私は私のサーバーにxmlファイルをアップロード
library(XML)
branchFunction <- function(progress=10) {
res <- new.env(parent=emptyenv()) # for results
it <- 0L # iterator -- nodes visited
list(publication=function(elt) {
## handle 'publication' nodes
if (getNodeSet(elt, "not(/publication/feature/id)"))
## early exit -- no feature id
return(NULL)
it <<- it + 1L
if (it %% progress == 0L)
message(it)
publication <- getNodeSet(elt, "string(/publication/id/text())") # 'key'
res[[publication]] <-
list(miniref=getNodeSet(elt,
"normalize-space(/publication/miniref/text())"),
features= xpathSApply(elt, "//feature/id/text()", xmlValue))
}, getres = function() {
## retrieve the 'res' environment when done
res
}, get=function() {
## retrieve 'res' environment as data.frame
publication <- ls(res)
miniref <- unlist(eapply(res, "[[", "miniref"), use.names=FALSE)
feature <- eapply(res, "[[", "features")
len <- sapply(feature, length)
data.frame(publication=rep(publication, len),
feature=unlist(feature, use.names=FALSE),
miniref=rep(miniref, len))
})
}
branches <- branchFunction()
xmlEventParse("~/Downloads/jnk.xml", handlers=NULL, branches=branches)
# xmlEventParse("~/Downloads/FBrf.xml", handlers=NULL, branches=branches)
branches$get()
次のコード行であるhttp://download.dejung.net/jnk.xml
ファイルには数KBしかありませんが、問題はその結果です。 2番目のパブリケーションエントリは、FBrf0162243というIDと、Schwartz et al., 2003, Mol. Cell. Biol. 23(19): 6876--6886
というミニIDを持ちます。
私が上に掲示したコードからの私の結果は、間違った出版IDを対応するminirefに報告します。機能IDは
FBrf0050934 FBgn0003277 Schwartz et al., 2003, Mol. Cell. Biol. 23(19): 6876--6886
ない私のコードが間違った値を報告している理由は、これは私にとって非常に新しいものであることから、多分誰かが閉鎖で私を助けることができることを確認....正しいです。
これは、それ自体でエンコーディングを推測しようとするかもしれない 'read_html'を試してみてください。 – Rentrop
'dat
hrbrmstr
@hrbrmstrこれらの文字を削除するだけですか?そしてどうやって? @ Floo0昨日私は 'read_html'を試しましたが、それは20分以上かかってしまい、プロセスをやめる必要がありました。今日もう一度試して、それが走っているかどうかを見てみましょう。 'read_xml'コマンドは数分後に終了します。 – drmariod