Как я могу загрузить сразу несколько пакетов без повторного ввода команды require? Я попробовал три подхода, каждый из которых терпит крах и горит.
По сути, я хочу предоставить вектор имен пакетов для функции, которая будет их загружать.
x<-c("plyr", "psych", "tm")
require(x)
lapply(x, require)
do.call("require", x)
x
?lapply
трюк кlibrary()
. Будьте велики, чтобы иметь возможность сказать:library(c("plyr", "umx"))
CRAN пакет pacman , что я поддерживаю ( в соавторстве с Dason Kurkiewicz) может сделать это:
Таким образом, пользователь может сделать:
и если пакет отсутствует
p_load
, загрузите его с CRAN или Bioconductor.источник
p_load
? Более описательное имя, например,load_packages
делает назначение функции более понятным.p_
. Плюс мы склонны немного использовать библиотеку, и это дополнительные 7 символов. 7 символов x ~ 1000000 пожизненного использования функции x .5 секунд на символ = 3500000 секунд. Это 58333,33 минуты, 972,2222 часа или 40,50926 дней из жизни программиста, которые мы им вернули :-) В любом случае наша цель - перейти к CRAN к 1 февраляp_
сомнительным ваше обоснование префикса. Если краткость является проблемой, удалитеp_
префикс полностью. Фактически, наличие таких префиксов обычно не рекомендуется на других языках по уважительным причинам (я сказал Хэдли, что они одинаковы в отношении егоfct_
глупости в forcats). Это особенно верно, поскольку предполагаемое использование th-пакета с квалифицированным пространством имен (pacman::
).Это должно сделать трюк:
(Ключевой бит в том, что
args
аргумент вdo.call(what, args)
должен быть списком - даже если он имеет только один элемент!)источник
Для тех, кто хочет установить и загрузить пакеты одновременно, я наткнулся на эту функцию по этой ссылке
источник
Альтернативный вариант приходит из пакета
easypackages
. После установки вы можете загружать пакеты наиболее интуитивно понятным способом:В пакет также входит функция для установки нескольких пакетов:
Ссылка здесь .
источник
library
функции относится к месту, где установлены пакеты: библиотека пакетов . Загрузка нескольких пакетов черезlibraries
нет смысла. Наличие отдельной функции,packages
которая делает что-то еще, только ухудшает это. Я знаю, что именование - сложная проблема в разработке программного обеспечения, но на самом деле. Эти имена особенно плохи.libraries
не имеет смысла. Это множественное числоlibrary
иlibrary
загружает один пакет;libraries
загружает множество пакетов. Если вы понимаете, чтоlibrary
означает «загрузить из вашей отдельной библиотеки», и расширили этоlibraries
значение до «загрузки из нескольких библиотек», то это, возможно, не интуитивно понятно, но это не цель; Я был бы вполне доволен именемlibraries
.Вы можете просто использовать пакет lubripack, и он аккуратно устанавливает новые пакеты, а затем загружает их все в одну строку.
Вот вывод после запуска кода выше в RStudio.
Как установить пакет:
Запустите приведенный ниже код, чтобы загрузить пакет и установить его с GitHub. Нет необходимости иметь учетную запись GitHub.
источник
Опираясь на решение Дароцига, если вы не хотите указывать список в качестве входных данных, вы можете использовать
... который короче
источник
Я использую следующую функцию:
Это пытается загрузить, и если это не удается установить, а затем попробуйте загрузить снова.
источник
Я думаю, что код, предоставленный @daroczig, можно улучшить, заменив оператор
require
withlibrary
и заключивlapply
вызов вinvisible()
функцию. Итак, улучшенный код будет выглядеть следующим образом:Этот код улучшен, потому что:
library()
обычно предпочтительнее, чемrequire()
загрузка пакетов, потому что первый выдает ошибку, если пакет не установлен, а второй просто выдает предупреждение. Более того,require()
звонкиlibrary()
, так почему бы просто не использоватьlibrary()
напрямую!Объект списка, возвращенный и напечатанный
lapply()
вызовом, в этом случае не имеет смысла, поэтому имеет смысл сделать вывод невидимым. Допустим, вы используете R Notebook для анализа, используяinvisible()
функцию, чтобы подавить содержимое объекта списка и предотвратить беспорядок в визуализированном файле ноутбука.источник
Небольшой мод ответа Тайлера Ринкера, чтобы добавить чек для установки и загрузки pacman:
Мне нравится решение p_load, потому что оно избегает цитирования!
источник