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

Обновить пакет R с скомпилированными расширениями

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

$ R CMD build Rliblinear
$ R CMD INSTALL Rliblinear

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

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

Однако функции C не затрагиваются, если я не перезапущу интерпретатор R. Есть ли способ заставить интерпретатора перезагрузить общий объект, Rliblinear.so?

4b9b3361

Ответ 1

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

library.dynam()

и это выгрузит Rliblinear.* в пакет Rliblinear.

library(Rliblinear)

# ... run package ...

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

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

Ответ 2

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

Итак, мой рабочий поток будет

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

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

Ответ 3

вот расширение для г-на Г. Гротендика ответ, если он встроен в "ваш пакет", можно перекомпилировать его одним выстрелом из консоли 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')