2013-05-07 4 views
17

Я хотел бы установить пакет непосредственно из URL-адреса источника пакета. Я хочу сделать это, чтобы люди могли протестировать предварительно выпущенную версию пакета, которая не должна быть широко (или постоянно) доступна. This - аналогичный вопрос, но он отличается тем, что он описывает только то, как устанавливать из локальных файлов не общие URL-адреса.Установите пакет R непосредственно из URL-адреса для источника пакета

Для этого вопроса я буду использовать ссылку на источник пакета boot. Чтение ?install.packages особенно описание pkgs аргумента предлагает:

install.packages(
    "http://cran.r-project.org/src/contrib/Archive/boot/boot_1.3-7.tar.gz", 
    repos = NULL, type = "source" 
) 

Однако это не удается с:

Warning in install.packages : 
    installation of package 
    ‘http://cran.r-project.org/src/contrib/Archive/boot/boot_1.3-7.tar.gz’ 
    had non-zero exit status 

Советовать что URL интерпретируется как имя пакета, а не его место. Мы можем обойти это с помощью следующей процедуры два этапа:

download.file(
    "http://cran.r-project.org/src/contrib/Archive/boot/boot_1.3-7.tar.gz", 
    "boot" 
) 
install.packages("boot", repos = NULL, type = "source") 

Но я предпочел бы сделать это с помощью одного вызова только install.packages; и поскольку install.packages способен скачивать файлы, я считаю, что это должно быть возможно.

+0

Пакет не найден в вашем первоначальном запросе, потому что его нет. Это 'boot_1.3-9.tar.gz' в этом каталоге. –

+0

@ SimonO101 жаль, что это была ошибка, которую я сделал при написании вопроса. Фиксация этого, к сожалению, не изменяет поведение. – orizon

+1

Почему бы не настроить каталог, в котором вы храните исходный пакет в качестве репозитория? [Вот пример] (http://stackoverflow.com/questions/2905650/creating-a-local-r-package-repository), хотя вы, скорее всего, захотите подставить 'type =" source "' for 'type = "win.binary" ' –

ответ

16

install.packages теперь работает с URL-адресами http (но не https) с 3.1.1. Это работает для меня:

install.packages("http://www.lepem.ufc.br/jaa/colorout_1.1-0.tar.gz", repos=NULL) 

Edit: На R 3.2.0, https является встроенной через Libcurl. Это должно работать:

install.packages("https://github.com/hadley/devtools/archive/v1.7.0.tar.gz", 
       repos=NULL, method="libcurl") 

Edit: На R 3.2.2 https должен работать с параметрами по умолчанию, предполагающие Libcurl поддержка была составлена ​​в

Edit 2016-04-20:. Там могут быть некоторые проблемы загрузка пакетов, размещенных на S3, но method='wget', похоже, сейчас работает для них.

+0

Этот метод завершился с ошибкой «403 Forbidden» при установке.packages() 'попытался загрузить файл с помощью' download.file() '. Не уверен, что поддержка libcurl была скомпилирована, но 'devtools :: install_url()', предложенная @G. Гротендик работает без проблем. –

+0

Это звучит как проблема аутентификации. Какой URL-адрес вы пытаетесь загрузить? –

+0

Да, это похоже на другой URL (возможно, там, где фактически размещен файл). Сравните 'install.packages (" https://bitbucket.org/kleinstein/logminer/downloads/pclogit_0.2.tar.gz ")' to 'devtools :: install.packages (" https://bitbucket.org/kleinstein /logminer/downloads/pclogit_0.2.tar.gz ")' –

2

Почему бы не создать каталог, в котором вы храните исходный пакет в качестве репозитория?

Here is an example (хотя вы, вероятно, захотите заменить type="source" на номер type="win.binary" в код по этой ссылке).

+0

Это решает мою проблему. Я надеялся, что '' install.packages'' сможет загружать и устанавливать пакеты за пределами репозитория, но внимательно прочитав документацию, я думаю, что это невозможно, поэтому я принял ваш ответ. – orizon

9

См. ?install_url в пакете devtools.

+0

Спасибо. Это решает мою проблему напрямую. – orizon

Смежные вопросы