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

Function to check if R function relies on C/C++ compiled code?

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

iscompiled(somepackage::fun)
TRUE

万一包 somepackage 中的函数 fun() 在后台使用编译的 C/C++ 代码,而不是在纯 R 中实现。我想可以检查整体包对 Rcpp 的依赖性,但这仍然不能说明该包中各个函数对 C/C++ 的依赖性。我当然知道大多数基本 R 函数已经使用编译的 C/C++ 代码,这不是我的意思......有什么想法吗?检查该函数的源代码中是否出现 .C.CallsourceCpp

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

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

请注意,如果 f 间接地 调用此类代码,例如,f 调用 g 而后者又调用了上述代码return f 为假,g 为真。类似地,如果 f 是一个 S3 泛型,它又调用特定的方法并且一个方法执行调用,那么上面的 return 对于 f 是假的,但对于任何方法 f.X 都是真直接调用 C/C++ 或 Fortran.