繁体   English   中英

如何在R包中分析底层C代码?

[英]How do I profile the underlying C-code in an R package?

我对C有很好的理解,但很少有R.我在源代码上安装了R-package(coxme)到Windows7的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包装中找到大部分时间吃的东西?

主要问题是Rstudio(至少在Windows7上)一旦加载就不会更新任何.dll。 因此,我对C代码的编辑从未生效,因为旧的.dll从未被替换,即使我通过install.packages()卸载和重新编译也是如此。 我不得不完全退出Rstudio并手动删除包目录(coxme)。 然后从我编辑的源中重新启动安装中的Rstudio。 现在,我的编辑可以提供所需的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM