使用源行号来分析已安装的R包?

时间:2015-08-01 07:50:27

标签: r profiling data.table

我想使用data.tableRprof()在已安装的R包(line.profiling=TRUE)中分析功能。通常,已安装的包是字节编译的,并且行号不可用于字节编译的包。使用Rprof()进行行分析的常用说明需要使用source()eval(parse()),以便存在srcref属性。

如何加载data.table以使行号处于活动状态?我首次尝试使用library(data.table)然后source('data.table.R')首次加载包失败,因为当我尝试使用该包时,找不到某些已编译的C函数,可能是因为library()正在使用不同命名空间也许有一些方法source()进入正确的命名空间?

或者,也许我可以构建一个不是字节编译的data.table的修改版本,然后以保持行号的方式加载它?我必须做出哪些改动,然后我将如何加载它?我首先设置ByteCompile: FALSE,然后尝试R CMD INSTALL -l ~/R/lib --build data.table,但这似乎仍然是字节编译的。

我渴望做这项工作,并会寻求任何建议。我在Linux上运行R 3.2.1,可以完全控制机器,并且可以安装任何其他所需的东西。

编辑:

我试图解决的问题(及其解决方案)的更完整描述在这里:https://github.com/Rdatatable/data.table/issues/1249

我最终基本上完成了约书亚所建议的:用" KeepSource:TRUE"重新编译包。在描述中。为了我的目的,我还发现了" ByteCompile:FALSE"尽管这可能不适用。我还更改了版本号,以便我可以看到我正在使用我的修改版本。

然后我使用" R CMD INSTALL data.table -l~ / R / lib"安装到不同的位置,并加载"库(data.table,lib =&#39) ;〜/ R / lib中')&#34 ;.当与链接中给出的补丁一起使用时,我得到了我想要的分配的行号。但是,如果有人知道一个不需要重新编译的解决方案,我相信如果你们分享,别人会很感激。

1 个答案:

答案 0 :(得分:3)

即使包是字节编译的,您也应该能够获得行号。但是,正如它在?Rprof中所说的那样(强调增加):

  

个人陈述将记录在个人资料日志中   line.profilingTRUE,如果正在执行的代码是   使用源引用解析。有关讨论,请参阅parse   来源参考。默认情况下,语句位置不是   显示在summaryRprof中,但请参阅该选项的帮助页面   启用显示。

这意味着您需要在KeepSource: TRUE文件中设置DESCRIPTION,或者通过--with-keep.source参数设置R CMD INSTALL