如何连接R';s类(S4或S3)带有C';s类

如何连接R';s类(S4或S3)带有C';s类,c,r,C,R,我需要从R调用一个C函数,以类(S3或S4)的形式传递一些对象。在C中,我将处理结构(为参数、设置值等动态分配内存),然后我需要将修改后的结构返回给R(可能是通过引用)。我认为应该可以在R中创建一个类似的类,然后将其传递给C 考虑到为R编写C扩展的可能性,我检查了R中的.C和.Call函数来调用C函数,但我不知道如何将类传递给这些函数。他们似乎只接受定义为SEXP的公共类型和不包含个性化类的派生 如果有人遇到这个问题,我将非常感谢他的帮助您可以先阅读Hadley Wickham的,这将为您提供编

我需要从R调用一个C函数,以类(S3或S4)的形式传递一些对象。在C中,我将处理结构(为参数、设置值等动态分配内存),然后我需要将修改后的结构返回给R(可能是通过引用)。我认为应该可以在R中创建一个类似的类,然后将其传递给C

考虑到为R编写C扩展的可能性,我检查了R中的
.C
.Call
函数来调用C函数,但我不知道如何将类传递给这些函数。他们似乎只接受定义为SEXP的公共类型和不包含个性化类的派生


如果有人遇到这个问题,我将非常感谢他的帮助

您可以先阅读Hadley Wickham的,这将为您提供编写从R调用的C代码的坚实背景。它并没有精确地涵盖您的确切问题,但老实说,我觉得在尝试实施任何可能有人在这里为您提供的解决方案之前,您最好先查阅这些信息。(另外,你的问题陈述不是很具体,因此你可能还没有得到很好的回答)。非常感谢你的回答,但我已经阅读了你的建议,甚至是官方手册,但正如你所说,他们没有回答我的问题。请注意,S3类,在引擎盖下,是“普通类型”;大多数情况下,它们在R中是一个
列表
,在C中是一个
VECSXP
。它们只有一个class属性,有时还有其他属性。您可以通过获取和设置C端R对象的属性。在自定义应用程序中,将结构转换为R对象应该很简单;您只需创建适当的R对象,并根据需要分配数据。我不确定您需要什么进一步的信息好的,谢谢,您的评论非常有用,而且似乎R的REF类也可以传递给C,因为它们是“普通类型”,所以我可以在C中修改它们,也可以在R中修改它们,而不必返回。