c-R包开发:如何检查SEXP的类型是否"big.matrix"?



我正在用低级C代码开发一个R包。假设我在C代码中有以下函数:

SEXP myFun(SEXP obj)

我需要知道R对象obj是常规的matrix还是big.matrix(使用R包bigmemory),以便我可以调用不同的函数进行计算。

这可能吗?我怎么知道obj的类类型

您可以使用inherits函数:

#include <R.h>
#include <Rinternals.h>
SEXP myFun(SEXP obj) {
    if (inherits(obj, "big.memory")) {
        // do stuff
    }
}

如果你对c++(而不是C)开放,那么我们有两篇Rcpp图库文章给你:

  • BigMemory with Rcpp
  • BigMemory with RcppArmadillo

狭窄的答案可能是测试外部指针SEXP在S4类…但是之后我就不再使用纯C了,因为Rcpp让事情变得简单多了。

最新更新