我正在使用SWIG生成封装代码以从R语言访问C代码。包装代码使用R externalptr
类型来保存对C指针的引用。在某些情况下,这些指针在C端为NULL,在R中显示时显示为零值。在R方面,在externalptr
上拨打is.null()
和is.na()
均返回FALSE
。例如:如何检查externalptr是否为空R
> val = librdf_query_results_get_binding_value(results, 2)
> val
An object of class "_p_librdf_node_s"
Slot "ref":
<pointer: (nil)>
> class([email protected])
[1] "externalptr"
> is.null([email protected])
[1] FALSE
> is.na([email protected])
[1] FALSE
如可以从上面的代码输出中可以看出,狭槽ref
含有externalptr
,这是“无”。我如何从R中确定C中的这个指针是NULL?
如果你想在上下文中查看代码,它可在GitHub上: https://github.com/ropensci/redland-bindings/blob/master/R/redland/inst/tests/test.redland_base.R#L40
我想你可能需要一个C/C++帮助函数来为你计算外部指针。 – 2014-10-31 02:30:41
我认为@DirkEddelbuettel是对的。您可能需要考虑'bigmemory :: is.nil'作为指导。 – 2014-10-31 02:58:57
谢谢@DirkEddelbuettel,我很怀疑。那么你认为''externalptr'类型的重写is.null()是否合理,还是将它放在我自己的包中会更好? – metamattj 2014-10-31 04:49:31