web-dev-qa-db-fra.com

R génère une erreur "schéma d'URL non pris en charge" lors de l'obtention de données à partir de sites https

R version 3.0.1 (2013-05-16) pour Windows 8 knitr version 1.5 Rstudio 0.97.551

J'utilise knitr pour faire le démarquage de mon code R. Dans le cadre de mon analyse, j'ai téléchargé divers ensembles de données à partir du Web. knitr convient parfaitement à l'obtention de données à partir de sites http, mais à partir de sites https générant un message unsupported URL scheme. Je sais que lorsque vous utilisez la fonction download.file sur un mac, le paramètre method doit être défini sur curl pour obtenir les données d'un https, mais cela n'aide en rien l'utilisation de knitr.

Que dois-je faire pour que knitr recueille les données des sites Web Https?

Edit: Voici le bloc de code qui retourne une erreur dans Knitr mais quand il est exécuté, R fonctionne sans erreur.

```{r}
fileurl <- "https://dl.dropbox.com/u/7710864/data/csv_hid/ss06hid.csv"
download.file(fileurl, destfile = "C:/Users/xxx/yyy")
```
11
Jonno Bourne

Edit (May 2016) : À partir de la version 3.3.0, download.file() devrait gérer les sites Web SSL automatiquement sur toutes les plateformes, ce qui rendrait le reste de cette réponse inutile.

Vous voulez quelque chose comme ça:

library(RCurl)
data <- getURL("https://dl.dropbox.com/u/7710864/data/csv_hid/ss06hid.csv",
               ssl.verifypeer=0L, followlocation=1L)

Cela lit les données en mémoire sous forme de chaîne unique. Vous devrez quand même l'analyser dans un jeu de données d'une manière ou d'une autre. Une stratégie est la suivante:

writeLines(data,'temp.csv')
read.csv('temp.csv')

Vous pouvez également séparer les données directement sans écrire dans un fichier:

read.csv(text=data)

Edit: Une option beaucoup plus simple consiste à utiliser le paquet rio :

library("rio")
import("https://dl.dropbox.com/u/7710864/data/csv_hid/ss06hid.csv")

Cela lira directement à partir de l'URL HTTPS et retournera un data.frame.

9
Thomas

Vous pouvez utiliser https avec la fonction download.file () en passant "curl" à method en tant que:

download.file(url,destination,method="curl")
20
Fabien Barbier

Utilisez setInternet2(use = TRUE) avant d'utiliser la fonction download.file(). Cela fonctionne sur Windows 7.

setInternet2(use = TRUE)
download.file(url, destfile = "test.csv")
9
Renhuai

Je suis sûr que vous avez déjà trouvé une solution à votre problème maintenant.

Je travaillais sur une mission en ce moment et j'ai fini par avoir la même erreur. J'ai essayé quelques astuces, mais cela n'a pas fonctionné pour moi. Peut-être parce que je travaille sur une machine Windows.

Quoi qu'il en soit, j'ai changé le lien en http: plutôt qu'en https: et c'est ce qui a joué.

Voici une partie de mon code:

if (!file.exists("./PeerAssesment2")) {dir.create("./PeerAssessment2")}
fileURL <- "http://d396qusza40orc.cloudfront.net/repdata%2Fdata%2FStormData.csv.bz2"
download.file(fileURL, dest = "./PeerAssessment2/Data.Zip")

install.packages("R.utils")
library(R.utils)
if (!file.exists("./PeerAssessment2/Data")) {
    bunzip2 ("./PeerAssessment2/Data.Zip", destname = "./PeerAssessment2/Data")
}
list.files("./PeerAssessment2")

noaaData <- read.csv ('./PeerAssessment2/Data')

J'espère que cela t'aides.

5
user3694373

J'ai eu le même problème avec knitr et download.file () avec une URL https, sous Windows 8.

Vous pouvez essayer setInternet2(TRUE) avant d'utiliser la fonction download.file(). Cependant, je ne suis pas sûr que ce correctif fonctionne sur des systèmes de type Unix.

setInternet2(TRUE)  # set the R_WIN_INTERNET2 to TRUE
fileurl <- "https://dl.dropbox.com/u/7710864/data/csv_hid/ss06hid.csv"
download.file(fileurl, destfile = "C:/Users/xxx/yyy") # now it should work

Source: R documentation (?download.file()):

Notez que les URL https: // ne sont prises en charge que si --internet2 ou la variable d’environnement R_WIN_INTERNET2 a été définie ou si setInternet2 (TRUE) a été utilisé (pour utiliser les éléments internes d’Internet Explorer), puis uniquement si le certificat est considéré comme valide.

4
nbedou

J'ai eu le même problème avec un https avec le code suivant fonctionnant parfaitement dans R et obtenant unsupported URL scheme lors du tricotage au format HTML:

temp = tempfile()
download.file("https://d396qusza40orc.cloudfront.net/repdata%2Fdata%2Factivity.Zip", temp)
data = read.csv(unz(temp, "activity.csv"), colClasses = c("numeric", "Date", "numeric"))

J'ai essayé toutes les solutions affichées ici et rien n'a fonctionné. Dans mon désespoir absolu, j'ai simplement éliminé le "s" dans le "https" dans l'URL et tout s'est bien passé ...

1
user2500444

L'utilisation du paquet R download prend en charge les détails insolites généralement associés aux téléchargements de fichiers. Par exemple, tout ce que vous deviez faire aurait été:

```{r}
library(download)
fileurl <- "https://dl.dropbox.com/u/7710864/data/csv_hid/ss06hid.csv"
download(fileurl, destfile = "C:/Users/xxx/yyy")
```
0
Michael Szczepaniak