R 2.14 - обнаружение пакетов без пространства имен - PullRequest
19 голосов
/ 03 ноября 2011

Согласно R News для v2.14:

Все пакеты должны иметь пространство имен, и один создается при установке, если не указан в источниках.Это означает, что любой пакет без пространства имен должен быть переустановлен в этой версии R (но пакеты только для данных без кода R все еще могут использоваться).

Как программно определить, какие пакеты установленыпод 2.13.x нет пространства имен, так что я знаю, что нужно обновить?

Ответы [ 3 ]

22 голосов
/ 03 ноября 2011

Функция packageHasNamespace удерживает клавишу. Используйте его вместе с installed.packages:

Следующий код перебирает все местоположения библиотеки в .libPaths:

pkgNS <- NULL
for(i in seq_along(.libPaths())){
  libLoc <- .libPaths()[i]
  pkgs <- installed.packages(lib.loc=libLoc)[, 1]
  pkgNS <- c(pkgNS, 
      sapply(unname(pkgs), packageHasNamespace, package.lib=libLoc)
  )
}

Результатом этого кода является именованный логический вектор pkgNS, который ИСТИНА, если у пакета есть пространство имен, ЛОЖЬ, если его нет.

Чтобы получить только те пакеты, которые не имеют пространства имен, создайте подмножество pkgNS, где pkgNS - ЛОЖЬ:

pkgNS[!pkgNS]

      abind      bitops   CircStats    combinat     corpcor      deldir 
      FALSE       FALSE       FALSE       FALSE       FALSE       FALSE 
     Design         evd   financial         fpc      getopt      gsubfn 
      FALSE       FALSE       FALSE       FALSE       FALSE       FALSE 
       ineq       magic     mlbench    optparse     plotrix       ppcor 
      FALSE       FALSE       FALSE       FALSE       FALSE       FALSE 
5 голосов
/ 03 ноября 2011

Просто беги:

update.packages(checkBuilt=TRUE)
3 голосов
/ 07 февраля 2012

Отличная тема. Я застрял на той же проблеме. Чтобы закончить все, что нужно сделать, вы можете:

remove.packages(names(pkgNS[!pkgNS]))
install.packages(names(pkgNS[!pkgNS]))
...