我有一个大型的C程序(无法共享可复制的代码),我想将其包含在R包中,这样用户就不必自己编译它并且它是独立的。因此,编译后的代码部分仅由一个包函数使用,例如
wrapperfoo <- function(config_file_path, output_file_path) {
#stuff
#...
.C("myprogram", config_file_path, output_file_path)
#...
}
C代码的问题在于它使用了不会重置的Flex / Bison扫描仪/解析器。代码不是我的,我想避免重写扫描器(C中的简单修复不起作用,包括一些有关SO的主题,例如yylex_destroy()
,我是C新手,因此调试很困难。)>
如果在R中我在调用程序后卸载该软件包并再次加载,则完全可以。 (如果在R之外编译和运行,效果很好。)
这可行:
library(mypackage)
wrapperfunction()
unloadNamespace("mypackage") #invokes library.dynam.unload()
library(mypackage)
wrapperfunction()
但这不会:
library(mypackage)
wrapperfunction()
wrapperfunction() #parser crashes and with it R
在我的wrapperfunction()
中加载和卸载DLL可以吗?在我看来,这违反了R包编写的良好实践,我什至不知道是否可行?
还是在.C之后还有其他函数需要清除?会使用.Call帮助吗? gc()
没有帮助