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

Tom*_*ers 1 c c++ r rcpp

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

iscompiled(somepackage::fun)
TRUE
Run Code Online (Sandbox Code Playgroud)

如果fun()包中的函数somepackage使用编译后的C/C++代码而不是在纯R中实现,我想可以检查一个包的整体依赖性Rcpp,但这仍然没有说明个人的依赖性在C/C++上的那个包中的函数.我当然知道大多数基本R函数已经使用了编译的C/C++代码,这不是我的观点......有什么想法吗?检查的发生.C,.CallsourceCpp在该函数的源代码?

G. *_*eck 6

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

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

注意,如果f 间接调用这样的代码,例如f调用g又调用了那么上面的代码将返回FALSE,f但是为TRUE g.类似地,如果f是S3泛型,它反过来调用特定方法,并且方法执行调用,那么f对于直接调用C/C++或Fortran的任何方法fX,上面将返回FALSE,但为TRUE.