Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用已编译的扩展重新加载R包_R_Package - Fatal编程技术网

用已编译的扩展重新加载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功能不会受到影响。 有没有一种方法可以强制解释器

是否可以在R会话中重新加载带有本机扩展的R包? 我正在开发,它使用了几个
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的,将会修复。谢谢,这正是我想要的。