我正在开发一个带有低级 C 代码的 R 包。假设我的C
代码中有以下功能。
SEXP myFun(SEXP obj)
我需要知道 R 对象obj
是常规对象matrix
还是big.matrix
(使用 R 包bigmemory
),以便我可以调用不同的函数进行计算。
这可能吗?我怎么知道的类类型obj
?
我正在开发一个带有低级 C 代码的 R 包。假设我的C
代码中有以下功能。
SEXP myFun(SEXP obj)
我需要知道 R 对象obj
是常规对象matrix
还是big.matrix
(使用 R 包bigmemory
),以便我可以调用不同的函数进行计算。
这可能吗?我怎么知道的类类型obj
?
如果您对 C++(而不是 C)持开放态度,那么我们为您准备了两个Rcpp Gallery帖子:
狭义的答案可能是在 S4 类中测试外部指针SEXP
......但后来我真的不再做纯 C 语言了,因为 Rcpp 让事情变得容易多了。
您可以使用继承功能:
#include <R.h>
#include <Rinternals.h>
SEXP myFun(SEXP obj) {
if (inherits(obj, "big.memory")) {
// do stuff
}
}