用已编译的扩展重新加载R包
是否可以在R会话中重新加载带有本机扩展的R包? 我正在开发,它使用了几个用已编译的扩展重新加载R包,r,package,R,Package,是否可以在R会话中重新加载带有本机扩展的R包? 我正在开发,它使用了几个C函数。 如果我对软件包中的R代码进行更改,我可以重新安装并重新加载 $ R CMD build Rliblinear $ R CMD INSTALL Rliblinear 然后在Rshell中 > detach("package:Rliblinear", unload=TRUE) > library(Rliblinear) 但是,除非我重新启动R解释器,否则C功能不会受到影响。 有没有一种方法可以强制解释器
C
函数。
如果我对软件包中的R代码进行更改,我可以重新安装并重新加载
$ R CMD build Rliblinear
$ R CMD INSTALL Rliblinear
然后在R
shell中
> detach("package:Rliblinear", unload=TRUE)
> library(Rliblinear)
但是,除非我重新启动R
解释器,否则C
功能不会受到影响。
有没有一种方法可以强制解释器重新加载共享对象,
Rliblinear.so
?我倾向于使用命令行进行测试,以确保获得新的R会话。您也可以使用Rscript
执行此操作
所以我的工作流程是
$ R CMD INSTALL Rliblinear/ ## alternatively, install from tarball
$ r -lRliblinear -e'someExpressionFromThePackage()'
您也可以使用
&&
将其包装成一行,和/或在前面添加一个干净的步骤。这将列出您加载的动态链接库:
library.dynam()
这将卸载rliblinar包中的rliblinar.
library(Rliblinear)
# ... run package ...
detach("package:Rliblinear", unload = TRUE)
library.dynam.unload("Rliblinear", system.file(package = "Rliblinear"))
您可以再次发布
library.dynam()
,只是为了检查它是否不再列出。这里是G.Grothendieck先生答案的扩展,如果嵌入到“yourpackage”中,您可以从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")
}
reload您是否也需要安装,或者littler是否正在使用tarball软件包?抱歉,本打算编写R CMD install的,将会修复。谢谢,这正是我想要的。