これら 2 つのコードについて考えてみましょう。最初のものでは、物事は正常に機能し、R のメモリ使用量は安定しています。
for (i in 1:100) {
x <- rnorm(1000000)
write.table(x, file="test", col.names=F, append=T)
}
ここで、いくつかの経済指標に関する情報を世界銀行からスクレイピングしている、この関連コードについて考えてみましょう。ここでは、ループが繰り返されるにつれてメモリ使用量が増加します。
library(RCurl)
library(XML)
for (i in 1:26) {
x <- getURL(paste("http://api.worldbank.org/countries/all/indicators/AG.AGR.TRAC.NO?per_page=500&date=1960:2012&page=", as.character(i), sep=""))
x <- xmlToDataFrame(x)
write.table(x, file="test", col.names=F, append=T)
}
データを書き込むという観点から見たこれら 2 つのスニペットの違いは何ですか? また、2 番目のスニペットがメモリを適切に解放するにはどうすればよいですか?