#r #function #install.packages
#r #функция #install.packages
Вопрос:
Я пытался написать функцию для замены функций library и install.packages из R, которая загружает функции, если она установлена, и устанавливает и загружает, если это не так. В первом случае это работает нормально, но когда я пытаюсь установить функцию, используя это, даже после установки она выдает ошибку «нет пакета с именем …». Пакеты устанавливаются правильно, но мне не удалось установить и загрузить за один запуск одной и той же функции. Я добавил команду sleep, надеясь, что она исправит это, но этого не произошло. Кто-нибудь знает, почему?
insist = function(name){
#enables entering package name without quotes
name = substitute(name)
name = as.character(name)
if (!require(name, character.only = T)) {
install.packages(name)
Sys.sleep(2)
library(name, character.only = T)
}
}
Комментарии:
1. Взгляните на github.com/trinker/pacman после установки
p_load
вы делаете именно то, что вам нужно.2. Кажется, он использует многоуровневую структуру для установки пакетов и их загрузки, но я не смог найти ничего принципиально отличного в его коде, что позволило бы ему работать и объяснить, почему мой сбой. Тщательно проверю, когда у меня будет больше времени
Ответ №1:
Это сообщение на самом деле исходит от require()
and, а не install.packages()
от or library()
. Держу пари, что пакет все еще добавляется в ваш путь поиска (по крайней мере, для меня). Поэтому я думаю, что вы должны быть более агрессивными в отношении подавления этого предупреждения. Попробуйте это.
insist = function(name){
#enables entering package name without quotes
name = substitute(name)
name = as.character(name)
if (suppressWarnings(!require(name, character.only = T, quietly=T))) {
install.packages(name)
library(name, character.only = T)
}
}
Комментарии:
1. Это не так. В начале
require
строки 6 выдается предупреждение, package … недоступно. У меня с этим нет проблем, но ошибка возникает из-за попытки библиотеки загрузить пакет в конце. В результате у меня возникает ошибка, и пакет не загружается, а только устанавливается.2. Вы выполнили пошаговое выполнение функции с помощью отладчика для подтверждения? Если это так, то я не смог повторить вашу ошибку. Мой приведенный выше код работает без ошибок / предупреждений для меня с тестируемыми пакетами.
3. Как ни странно, это не выдает ошибку. Это становится логичным.по какой-то причине возвращает True само по себе и вместо этого возвращает предупреждение. Но это явно из библиотеки не требуется. Я даже пытался вручную установить logical.return в false, но это не сработало
Warning message: In library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE, : there is no package called ‘corrplot’