Sourcing R скрипт по HTTPS - PullRequest
       6

Sourcing R скрипт по HTTPS

26 голосов
/ 10 октября 2011

Есть ли какой-нибудь способ получения сценария R из Интернета?

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

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

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

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

Ответы [ 6 ]

29 голосов
/ 04 апреля 2012

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

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

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

22 голосов
/ 10 октября 2011

Да, вы можете, попробуйте запустить этот учебник 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 действителен)

12 голосов
/ 10 октября 2011

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

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

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

Пример кода может быть таким:

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

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

2 голосов
/ 27 января 2014

Windows:

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

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

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

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

utils::setInternet2(TRUE)

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

Linux схожие:

Воспользуйтесь предложением Г. Гротендика.В командной строке 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

Подобные вопросы здесь:

1 голос
/ 22 марта 2014

Методы здесь дали мне следующую ошибку от 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'))

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

0 голосов
/ 25 марта 2018

Это работает для меня на окнах:

library(RCurl)
# load functions and scripts from github ----------------------------
fn1 <- getURL("https://raw.githubusercontent.com/SanjitNarwekar/Advanced-R-Programming/master/fn_factorial_loop.R", ssl.verifypeer = FALSE)
eval(parse(text = fn1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...