Подтвердить что ты не робот

R 2.14 - обнаружение пакетов без пространства имен

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

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

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

4b9b3361

Ответ 1

Функция 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, который имеет значение ИСТИНА, если пакет имеет пространство имен, FALSE, если это не так.

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

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 

Ответ 2

Просто запустите:

update.packages(checkBuilt=TRUE)

Ответ 3

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

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