我一直在使用R的C库,使用库的功能编写自定义C函数,然后使用.C-Interface从R访问这些C函数。
在一些C代码中,我为一些自定义结构分配空间,并希望在R中存储指针,这样我就可以在连续调用.C时使用这些结构。在使用.C函数时,我注意到我可以简单地将指向C结构的指针转换为int并将其作为整数存储在R中。通过.C将此整数传递给以后的调用工作正常,我可以跟踪我的结构并毫无问题地使用它们。
我有点天真的问题:将这些指针存储在R中的整数中有什么问题?它工作正常,所以我假设必须有一些缺点,但我找不到任何信息。
答案 0 :(得分:3)
即使在64位平台上,R的整数也是32位。因此,当在64位系统上工作时,这将不起作用(指针将是64位)。
R具有此功能。请参阅the 'Writing R Extensions' manual, the section on 'External pointers and weak references'。
如果您愿意切换到c ++(这并不意味着您必须重写所有代码),您可以使用Rcpp软件包,这样可以更轻松。请参阅示例External pointers with Rcpp