如何在R程序包中分析基础C代码?

时间:2019-05-06 14:22:14

标签: c r profiling

我对C有很好的了解,但对R的了解却很少。我已经从Windows 7的源代码中将R软件包(coxme)安装到R-studio中,其中包括将多个C文件编译成.dll。此软件包不是独立的,并且至少依赖于其他2个软件包(可能更多)。它运行太慢,所以我想看看是否可以通过首先对其进行分析来加快速度。我使用R-package“ profvis”分析了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()函数外,当我调用coxme(...)时,似乎包中的所有C函数都没有被执行。我的方法是:

remove.packages("coxme")

操作coxme“ src”目录中的C代码以打印到某些外部文件“我是函数XYZ,等等。”。创建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函数受到打击,我的性能分析代码也没有受到打击。所以我的问题是:

  1. 究竟执行了什么?
  2. 我如何在coxme程序包中找出大部分时间在吃什么?

1 个答案:

答案 0 :(得分:0)

主要问题是,Rstudio(至少在Windows7上)一旦加载就不会更新任何.dll。因此,即使从未卸载并通过install.packages()重新编译旧的.dll,我对C代码的编辑也从未生效。我必须完全退出Rstudio并手动删除软件包目录(coxme)。然后从我编辑过的源代码重新启动Rstudio进行安装。现在,我的编辑可以达到预期的效果。