一位同事将超过一千个S函数和Fortran子例程移植到R.本机R函数包含在5个.RData文件中,Fortran子例程包含在2个.dll文件中。
我可以使用
将这些文件加载到R工作区for (i in 1:5){ load(list.files()[grep("RData",strsplit(list.files(),"\\W+"))][i]) }
for (i in 1:2){dyn.load(list.files()[grep("dll" ,strsplit(list.files(),"\\W+"))][i]) }
经过一些故障排除后,我知道R代码和Fortran子程序之间的关系已经由原作者很好地建立起来了。
现在我想从这些文件创建一个包,因为我无法用这些dll文件部署我的ioslides_presentations,因为shinyapps.io是用Linux构建的。这是我第一次尝试创建R包,我不打算将它发布到CRAN,我只对生成我和我的学生可以加载的本地zip文件感兴趣。
我的过程
使用上面的代码在工作区中加载函数后,我运行了成功创建“package_1.0.tar.gz”的package.skeleton
和system("R CMD build package")
。完成DESCRIPTION文件后,我将.dll文件放在src
子目录中,并将useDynLib(DLL1), useDynLib(DLL2)
包含在NAMESPACE文件中。
但是,当我运行system("R CMD INSTALL build package_1.0.tar.gz")
时,我收到以下错误:
library.dynam(lib,package,package.lib)中的错误: 未找到DLL'package.dll':可能没有为此架构安装? 错误:加载失败 执行暂停
我花了很多时间阅读Hadley Wickham的“Writing R Extensions”,“Advanced R”和devtools文档。即使这样,我也无法解密useDynLib
,.onLoad
,Export
,Call
和Makevars
,这些应该用于预编译的Fortran代码。
我真的不想解析所有这些函数来找到哪些需要导出规则,如果我不需要。我很感激任何帮助这些.dll文件加载,所以我可以完成创建这个包
提前致谢, 杰森