gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 00:46:08 24 4
gpt4 key购买 nike

我想知道是否有任何自动化的方法可以检查给定包中的 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。它在函数体中搜索`调用:

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

请注意,如果 f 间接 调用此类代码,例如,f 调用 g 而后者又具有然后上面的调用将对 f 返回 FALSE,但对 g 返回 TRUE。类似地,如果 f 是一个 S3 泛型,它依次调用特定方法并且一个方法执行调用,那么上面的代码将为 f 返回 FALSE,但对于直接调用的任何方法 f.X 返回 TRUE C/C++ 或 Fortran。

关于c++ - 检查 R 函数是否依赖于 C/C++ 编译代码的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38540438/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com