2017-11-09 8 views
0

データをダウンロードするために以下のRスクリプトがありますが、エラーが表示されます。このエラーを修正するにはどうすればよいですか?Rを使用してWebからデータをダウンロードすると、libcurlエラーが発生する

rm(list=ls(all=TRUE)) 

library('purrr') 

years <- c(1980:1981) 
days <- c(001:002) 

walk(years, function(x) { 
map(x, ~sprintf("https://hydro1.gesdisc.eosdis.nasa.gov/data/NLDAS/NLDAS_MOS0125_H.002/%s/%s/.grb", years, days)) %>% 
    flatten_chr() -> urls 
download.file(urls, basename(urls), method="libcurl") 
}) 

エラー:

Error in download.file(urls, basename(urls), method = "libcurl") : download.file(method = "libcurl") is not supported on this platform I have the following R script for downloading data but it gives me an error. How can I fix this error?

セッション情報:

enter image description here

答えて

2

libcurlをインストールしたり、手術システムのために利用できない可能性があることを意味します。 method引数には他のオプションがあり、その方法は運用システムによって異なります(エラーメッセージのプラットフォームと多かれ少なかれ同じです)。他の方法(たとえば、wgetcurl ...)で試してみます。 download.filesのヘルプから

...

The supported ‘method’s do change: method ‘libcurl’ was introduced 
    in R 3.2.0 and is still optional on Windows - use 
    ‘capabilities("libcurl")’ in a program to see if it is available. 
1

私は(私はRLY PTSを必要としないので)@のgballenchの答えに光編集を行うために始めたが、それはあなたがそれを持っているよりももっと複雑ですあなたはそのイディオムで必要なファイルにアクセスするつもりはないので(99%が私の答えであることは間違いないでしょう:-)、その理由のすべてのホスト。

最初にdaysには、長さ3のパッドを埋め込み、0で埋め替える必要がありますが、それはできません。次に、各年/ 00xコンボからすべてのファイル.grbをダウンロードしたいので、それらを取得する方法が必要です。最後に、そのサイトでは認証が必要なため、基本認証を登録して使用する必要があります。このような

何か:

library(purrr) 
library(httr) 
library(rvest) 

years <- c(1980:1981) 
days <- sprintf("%03d", 1:2) 

sprintf("http://hydro1.gesdisc.eosdis.nasa.gov/data/NLDAS/NLDAS_MOS0125_H.002/%s/%%s/", years) %>% 
    map(~sprintf(.x, days)) %>% 
    flatten_chr() %>% 
    map(~{ 
    base_url <- .x 
    sprintf("%s/%s", base_url, read_html(.x) %>% 
       html_nodes(xpath=".//a[contains(@href, '.grb')]") %>% 
       html_attr("href")) 
    }) %>% 
    flatten_chr() %>% 
    discard(~grepl("xml$", .)) %>% 
    walk(~{ 
    output_path <- file.path("FULL DIRECTORY PATH", basename(.x)) 
    if (!file.exists(output_path)) { 
     message(.x) 
     GET(
     url = .x, 
     config = httr::config(ssl_verifypeer = FALSE), 
     write_disk(output_path, overwrite=TRUE), 
     authenticate(user = "[email protected]", password = "xldjkdjfid8y83"), 
     progress() 
    ) 
    } 
    }) 

あなたはcurlパッケージをインストールして、最終的には将来的にシンプルなバッチダウンロードのlibcurlが利用できるようになりますhttrパッケージをインストールする必要があります。

私はアカウントを持っていたので、このアプリにリンクしました。&これをテスト(30ダウンロードで終了)して動作します。 progress()GET()コールに追加したので、個々のファイルをダウンロードできるようになりました。既にダウンロードしたファイルをスキップします(そのため、いつでもファイルを削除して再起動できます)。再ダウンロードが必要な場合は、再ダウンロードするファイルを削除してください。

.xmlファイルも必要な場合は、discard()コールを削除してください。

+0

返信いただきありがとうございます。あなたのコードを試しましたが、次のエラーが表示されます。open.connection(x、 "rb")のエラー:SSL接続エラー。私はこのサイトでアクティブなアカウントを持っており、私は自分の資格情報を使用しました。このエラーについて何が分かりませんか?また、スクリプトには、データをダウンロードする場所への出力パスを指定する方法がありますか? – user8848543

+0

セッション情報については、上記の画像を参照してください。 – user8848543

+0

私はUbuntuの証明書を更新するための管理者特権を持っていません。このコードはWindowsで動作すると思いますか?また、それが動作する場合、出力データパスを指定する方法はありますか?ちょうどあなたがスクリプトを実行するために使用したOSを知りたい。私はあなたのためにこれが動作すると仮定します。 – user8848543

関連する問題