2012-06-28 4 views
6

на основе ответа на этот вопрос: Elegant way to check for missing packages and install them?Проверьте наличие установленных пакетов в R

Я использую следующий код, чтобы убедиться, что все пакеты устанавливаются при обновлении R, или настроить другие пользователи:

list.of.packages <- c("RODBC", "reshape2", "plyr") 
new.packages <- list.of.packages[!(list.of.packages %in% installed.packages()[,"Package"])] 
if(length(new.packages)) install.packages(new.packages) 

Я поместил его в моих .Первых функциях в моем .Rprofile, но когда я начинаю вверх R дает следующую ошибку и продолжает запуск:

Error in match(x, table, nomatch = 0L) : 
    could not find function "installed.packages" 

Если я бег гр ode после того, как я получу подсказку, он отлично работает. Любые идеи почему?

Спасибо!

ответ

11

Как видно из чтения ?Startup что:

Далее, если функция .Первый находится на пути поиска, он выполнен в .Первый(). Наконец, функция .First.sys() в базовом пакете - run. Для этого вызова необходимо прикрепить пакеты по умолчанию, заданные параметрами («defaultPackages»).

Теперь installed.packages находится в Utils пакет, который, как правило, один из пакетов по умолчанию. Таким образом, он недоступен в то время, когда вызывается .First.

Возможно, попробуйте заменить installed.packages на utils::installed.packages?

Как Джош отмечает, ниже мои глаза скользили по части, которая решает эту проблему непосредственно, а именно:

Обратите внимание, что когда сайт и профили пользователей файлы поставляются только базовый пакет загружен, поэтому объекты в другие пакеты должны быть , на которые ссылается, например, utils :: dump.frames или после явной загрузки пакета .

+1

Или (как описано чуть раньше в '? Startup', вы можете использовать' :: installed.packages' утилиты или первый явно загрузить пакет с 'требуют (Utils)'. –

+0

@ JoshO'Brien Джинксе! – joran

+0

Должен вам кокс! –

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