Перезагрузить R пакет с скомпилированными расширениями - PullRequest
16 голосов
/ 21 марта 2011

Можно ли перезагрузить пакет R с собственными расширениями в сеансе R?Я разрабатываю Rliblinear , который использует несколько C функций.Если я внесу изменения в код R в пакете, я могу просто переустановить и перезагрузить;

$ R CMD build Rliblinear
$ R CMD INSTALL Rliblinear

, а затем в оболочке R;

> detach("package:Rliblinear", unload=TRUE)
> library(Rliblinear)

Однако *На функции 1011 * это не влияет, если я не перезапущу интерпретатор R.Можно ли заставить интерпретатор перезагрузить общий объект, Rliblinear.so?

Ответы [ 3 ]

17 голосов
/ 21 марта 2011

Будет выведен список загруженных библиотек динамических ссылок:

library.dynam()

и будет выгружено Rliblinear.* в пакете Rliblinear.

library(Rliblinear)

# ... run package ...

detach("package:Rliblinear", unload = TRUE)
library.dynam.unload("Rliblinear", system.file(package = "Rliblinear"))

Вы можете снова выполнить library.dynam() простопроверить, что его больше нет в списке.

5 голосов
/ 21 марта 2011

Я обычно делаю свои тесты в командной строке с littler , чтобы быть уверенным, что я получаю новый R-сеанс. Вы также можете сделать это с Rscript.

Так что мой рабочий процесс будет

$ R CMD INSTALL Rliblinear/    ## alternatively, install from tarball
$ r -lRliblinear -e'someExpressionFromThePackage()'

, который также можно заключить в одну строку с помощью && и / или предшествовать чистому шагу.

4 голосов
/ 01 марта 2013

это расширение ответа мистера Дж. Гротендика, если оно встроено в «ваш пакет», его можно перекомпилировать одним выстрелом с консоли R:

reload <- function( path ){

   detach("package:yourpackage", unload = TRUE)
   library.dynam.unload("yourpackage", system.file(package = "yourpackage"))

   path <- paste( "--vanilla  CMD INSTALL ", path )

   system2( 'R', path  )
   require("yourpackage")
}

затем из R:

yourpackage :: reload ('/ home / me / yourpackage')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...