0

R では「for ループ、while ループ」を使用しない方がよいため、次の 2 つの方法で Web から URL をダウンロードしたいと考えています。

1. for ループの使用

url1="http://stat.ethz.ch/R-manual/R-devel/library/base/html/connections.html"
url2="http://en.wikipedia.org/wiki/Xz"
url=c(url1,url2)
dw=c("test1","test2")
for (i in 1:2){download.file(url[i],destfile=dw[i])}

「for loop」メソッドを「apply」メソッドに変更するにはどうすればよいですか?

2.RCurlの使用

require(RCurl)
urls = c("http://stat.ethz.ch/R-manual/R-devel/library/base/html/connections.html", "http://en.wikipedia.org/wiki/Xz")
txt = getURIAsynchronous(urls)

URLに何千ものWebアドレスが含まれているのはどうですか? URL に 10000 個の Web アドレスが含まれている場合、十分なメモリまたはディスク容量がありません...

4

2 に答える 2

3

使用できますmapply

urls <- rep('http://stackoverflow.com/questions/12169074/download-from-web',2) 
destfiles <- paste0('test',1:2,'.html')

mapply(download.file, url = urls, destfile = destfiles)

RCurlファイアウォール/プロキシの制限のためにこれをテストすることはできませんが、同様のアプローチが で機能するはずです

于 2012-08-29T00:01:56.963 に答える
2

for ループの質問に関しては、次のようなものを使用できます。

sapply(seq_along(url), function(n) download.file(url[n], dw[n])

for ループと非常によく似た動作をします。または @mnel はmapply. ただし、この例では、for ループを使用しても問題ありません。実際、R にはまったく遅くない for ループの書き方がたくさんあります。R Inferno には、これに関する優れたセクションがあります。

最短の答えは、ループ中に出力が拡張されるのではなく、事前に割り当てられている限り、R の for ループは問題ないということです。

あなたのRCurl質問に関しては、メモリエラーが発生した場合、2 つの選択肢があります。1. メモリを増やします。または 2. データをチャンクでダウンロードし、さらにダウンロードする前にディスクに書き込みます。

于 2012-08-29T00:05:45.433 に答える