我正在用低级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让事情变得简单多了。