gpt4 book ai didi

c - SWIG R 包装器未正确设置类/从 C 内存指针创建 R 对象

转载 作者:行者123 更新时间:2023-11-30 17:18:48 27 4
gpt4 key购买 nike

我有一个 SWIG 生成的 R 包装器,其中包含以下 setClass 操作:

setClass('_p_f_p_struct_parameters_p_struct_chromosome_p_struct_dataSet__double',
prototype = list(parameterTypes = c('_p_parameters', '_p_chromosome', '_p_dataSet'),
returnType = '_p_f_p_struct_parameters_p_struct_chromosome_p_struct_dataSet__double'),
contains = 'CRoutinePointer')

setClass('_p_f_p_struct_parameters_p_p_struct_chromosome_p_p_struct_chromosome_int_int__void',
prototype = list(parameterTypes = c('_p_parameters', '_p_p_chromosome', '_p_p_chromosome', '_int', '_int'),
returnType = '_p_f_p_struct_parameters_p_p_struct_chromosome_p_p_struct_chromosome_int_int__void'),
contains = 'CRoutinePointer')

这些操作似乎没有按预期运行。当我调用一个函数,其输出是创建 _p_parameters 对象(上面定义)时,出现以下错误:

Error in getClass(Class, where = topenv(parent.frame())) : 
“_p_parameters” is not a defined class

因此,setClass 似乎没有做它该做的事情。

我尝试通过以下方式手动设置 _p_parameters 类:

p_parameters<-setClass(Class="_p_parameters", representation = representation(ref = "externalptr"))

但这似乎不起作用,因为当我尝试修改其他参数(甚至通过内置函数打印参数)时,终端崩溃并挂起。

作为引用,initialiseParameters(最初拥有 _p_parameters 的函数)中的最后几行通过 .Call 调用 native C 函数,然后将外部指针分配给类 _p_paramters 的新对象,如下所示:

 ;ans = .Call('R_swig_initialiseParameters', numInputs, numNodes, numOutputs, arity, as.logical(.copy), PACKAGE='cgp');
ans <- new("_p_parameters", ref=ans) ;

我已经阅读了有关 new()、setClass、S3/S4 类的各种 R 文档,但似乎没有任何内容可以阐明我在这里要做什么。

任何关于从哪里开始的建议或可以提供良好提示的教程都将受到欢迎。

请记住,C 代码不是我的(但在 GNU 下可以免费获得),我不是 C 程序员,只是对 R 很弱-中度精通。所以请温柔点:)

干杯。

PS:如果我通过 .Call 调用 R 终端中的函数,它会按预期工作(因此它似乎不是 C 函数错误)

最佳答案

我想我应该发布我对此的解决方案。我至少能为“风滚草”奖牌做点什么,哈哈。我能找到的唯一解决方案是注释掉以下行:

ans <- new("_p_parameters", ref=ans) ;

在所有尝试创建 R 对象的函数中。然后,在函数调用时将生成的内存指针分配给 R 对象。它很脏,但我无法弄清楚如何从内存指针(至少从函数本身内部)创建对象。它似乎有效,所以我想它会做。

关于c - SWIG R 包装器未正确设置类/从 C 内存指针创建 R 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29075025/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com