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

时间:2015-09-27 18:15:54

标签: c r r-bigmemory

我正在开发一个带有低级C代码的R包。假设我的Exiting .rvm/gems/ruby-2.2.0/gems/puma-2.14.0/lib/puma/binder.rb:233:in `initialize': getaddrinfo: nodename nor servname provided, or not known (SocketError) 代码中有以下功能。

C

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

这可能吗?我怎么知道bigmemory的课程类型?

2 个答案:

答案 0 :(得分:2)

如果您对C ++(而不是C)持开放态度,那么我们会为您发送两个Rcpp Gallery帖子:

狭隘的答案可能正在测试S4类中的外部指针SEXP ......但是我不再那么简单了,因为Rcpp让事情变得如此简单。

答案 1 :(得分:2)

您可以使用inherits功能:

#include <R.h>
#include <Rinternals.h>

SEXP myFun(SEXP obj) {
    if (inherits(obj, "big.memory")) {
        // do stuff
    }
}