Подтвердить что ты не робот

Sourcing R script по HTTPS

Есть ли какой-то способ извлечения из R w370 > ?

например. source('http://github.com/project/R/file.r')

Причина: В настоящее время у меня есть проект, который я хотел бы сделать доступным для использования, но еще не готов к пакету. Поэтому было бы здорово предоставить людям один файл для источника из Интернета (который затем будет загружать все отдельные файлы функций).

При ближайшем рассмотрении проблема кажется https. Как я могу загрузить этот файл?

https://raw.github.com/hadley/stringr/master/R/c.r
4b9b3361

Ответ 1

Да, вы можете попробовать запустить этот учебник R:

source("http://www.mayin.org/ajayshah/KB/R/tutorial.R")

(Источник)

Https поддерживается только в Windows, когда R запускается с опцией командной строки --internet2 (см. FAQ):

> source("https://pastebin.com/raw.php?i=zdBYP5Ft")
> test()
[1] "passed"

Без этой опции или в linux вы получите сообщение об ошибке "неподдерживаемая схема URL". В этом случае прибегните к решению, предложенному @ulidtko, или:

Вот как это сделать, используя RCurl, который также поддерживает https:

    library(RCurl)
    eval( expr = 
        parse( text = getURL("http://www.mayin.org/ajayshah/KB/R/tutorial.R",
                       ssl.verifypeer=FALSE) ))

(Вы можете удалить ssl.verifypeer, если сертификат ssl действителен)

Ответ 2

Вы можете использовать source_url в библиотеке devtools

library(devtools)
source_url('https://raw.github.com/hadley/stringr/master/R/c.r')

Это оболочка для RCURL-метода @ROLO

Ответ 3

Да, это возможно и сработало для меня сразу.

R> source("http://pastebin.com/raw.php?i=zdBYP5Ft")
R> test()
[1] "passed"

Что касается части HTTPS, она не поддерживается внутренним R-кодом. Тем не менее, R может использовать внешние утилиты, такие как wget или curl для извлечения https://URL-адресов. Нужно написать дополнительный код, чтобы иметь возможность source файлов.

Пример кода может выглядеть следующим образом:

wget.and.source <- function(url) {
  fname <- tempfile()
  download.file(url, fname, method="wget")
  source(fname)
  unlink(fname)
}

Также есть решение для Windows: запустите R с опцией командной строки --internet2. Это переключит весь интернет-код в R на использование IE, и, следовательно, HTTPS будет работать.

Ответ 4

Окна:

Если Internet Explorer настроен для доступа к сети с использованием прокси-сервера организации, вы можете перенаправить R, чтобы использовать эти настройки IE вместо стандартных настроек R. Это изменение можно сделать одним из следующих шагов:

  • Сохраните свою работу и закройте все сеансы R, которые могут быть открыты.
  • Отредактируйте следующий файл. (Примечание. Ваш точный путь будет отличаться в зависимости от вашей установки R)

    C:\Program Files\R\R-2.15.2\etc\Rprofile.site

Откройте этот файл "Rprofile.site" в "Блокноте" и добавьте следующую строку в новую строку в конце файла:

utils::setInternet2(TRUE)

Теперь вы можете открыть новый сеанс R и повторить попытку команды "source".

Linux alikes:

Используйте предложение Г. Гротендика. В командной строке внутри R-типа:

source(pipe(paste("wget -O -", "https://github.com/enter/your/url/here.r")))

Вы можете получить сообщение об ошибке:

cannot verify certificate - - - - Self-signed certificate encountered.

В этот момент вам решать, доверять ли вы лицу, выдающему самозаверяющий сертификат, и продолжить или остановить.

Если вы решите продолжить, вы можете подключиться небезопасно следующим образом:

source(pipe(paste("wget -O -", "https://github.com/enter/your/url.r", "--no-check-certificate")))

Подробнее см. в следующем:

См. раздел 2.19

Похожие вопросы здесь:

Ответ 5

Методы здесь дали мне следующую ошибку из github:

OpenSSL: error:14077458:SSL routines:SSL23_GET_SERVER_HELLO:reason(1112)

Я использовал следующую функцию для ее устранения:

github.download = function(url) {
  fname <- tempfile()
  system(sprintf("curl -3 %s > %s", url, fname))                                                                                                                                                                                                                                                                                                                          
  return(fname)
}
source(github.download('http://github.com/project/R/file.r'))

Надеюсь, что это поможет!