我想使用data.table
和Rprof()
在已安装的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 ;.当与链接中给出的补丁一起使用时,我得到了我想要的分配的行号。但是,如果有人知道一个不需要重新编译的解决方案,我相信如果你们分享,别人会很感激。
答案 0 :(得分:3)
即使包是字节编译的,您也应该能够获得行号。但是,正如它在?Rprof
中所说的那样(强调增加):
个人陈述将记录在个人资料日志中
line.profiling
是TRUE
,,如果正在执行的代码是 使用源引用解析。有关讨论,请参阅parse
来源参考。默认情况下,语句位置不是 显示在summaryRprof
中,但请参阅该选项的帮助页面 启用显示。
这意味着您需要在KeepSource: TRUE
文件中设置DESCRIPTION
,或者通过--with-keep.source
参数设置R CMD INSTALL
。