检查R函数是否依赖于C / C ++编译代码的函数?

时间:2016-07-23 09:54:57

标签: c++ c r rcpp

我想知道是否有任何自动方式可以检查给定包中的R函数是否依赖于C / C ++编译代码来执行大部分操作,或者是否实现了它在纯R?我当然可以自己查看源代码,看看它是如何实现的,但我要找的是

iscompiled(somepackage::fun)
TRUE

如果包fun()中的函数somepackage使用编译的C / C ++代码而不是在纯R中实现,我想可以检查包的整体依赖性{ {1}},但这仍然无法说明C / C ++中该软件包中各个函数的依赖性。我当然知道大多数基本R函数已经使用了编译的C / C ++代码,这不是我的观点......有什么想法吗?检查该函数源代码中Rcpp.C.Call的出现次数?

1 个答案:

答案 0 :(得分:6)

如果函数是f,那么如果f 直接调用C / C ++或Fortran代码,则该值为TRUE。它在函数体中搜索``invocation:

any(grepl("\\b\\.(Call|Primitive|Internal|External|C|Fortran)\\b", body(match.fun(f))))

请注意,如果f 间接调用此类代码,例如,f调用g而调用f则上面的代码将返回FALSE { {1}}但g为真。类似地,如果f是S3泛型,它反过来调用特定方法并且方法执行调用,那么上面将为f返回FALSE,但对于直接调用C / C ++或Fortran的任何方法fX都返回TRUE。