我对C有很好的理解,但对R的了解很少。我在Windows7上的R-studio中安装了一个R-package(coxme),其中包括将几个C文件编译成一个.dll。此软件包不是独立的,至少依赖于2个其他软件包(可能更多)。它运行太慢,所以我想看看我是否可以通过首先分析它来加快速度。我用R包provvis来描述R代码,但它只告诉我98%的时间被coxme包使用,而没有给出任何进一步的细节。对R包的调用类似于:

frail.xg=coxme(Surv(y.vec,delta.vec)~x.mat+g.vec+(1|fiid.vec),varlist=list(K.mat))

整个包没有名为coxme(...)的函数,因此我不知道在调用此包之后会发生什么,如上图所示。我标记了包的“src”目录中的每个函数,以便将其打印(追加)到文件中,但只有init()函数在安装时在注册包时才会触发。当我在R-Studio中运行coxme时,其他函数都不会打印到该文件。除了init()函数之外,似乎包中的非C函数在我调用coxme(...)时也会执行。我的方法是:
remove.packages("coxme")

操作coxme“src”目录中的C代码以打印到某个外部文件“I am function XYZ,etc.”。创建coxme.tar.gz
install.packages('E:/Workdir/AOO/R/coxme/coxme.tar.gz', repos = NULL, type="source")
library("coxme")
frail.xg=coxme(Surv(y.vec,delta.vec)~x.mat+g.vec(1|fiid.vec),varlist=list(K.mat))

这产生了一些预期的结果。
但是,似乎没有一个C函数受到攻击,我的分析代码也没有。所以我的问题是:
什么会被处决?
我该如何去找出什么是吃了大部分时间内的coxme包?

最佳答案

主要问题是Rstudio(至少在Windows7上)在加载后不会更新任何.dll。因此,我对C代码的编辑从未生效,因为旧的.dll从未被替换,即使当我通过install.packages()卸载并重新编译时也是如此。我必须完全退出RStudio并手动删除包目录(COXME)。然后从我编辑的源重新启动Rstudio-in-install。现在,我的编辑提供了所需的结果。

关于c - 如何在R程序包中分析基础C代码?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56007127/

10-11 21:19