gpt4 book ai didi

c - 使用 .Call() 将 s4 对象发送到 C 结构

转载 作者:太空宇宙 更新时间:2023-11-04 06:23:14 26 4
gpt4 key购买 nike

我想将一个简单的 s4 对象传递给 C 并将其转换为一个简单的结构。我想象的 R 代码是这样的

setClass("MyClass", slots = list(x = "numeric", y = "integer"))
r_instance = new("MyClass", x = rnorm(5), y = as.integer(1:10))
dyn.load("parse.so")
.Call("parse", r_instance)

parse.c

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

typedef struct {
double x;
int y;
} MyStruct;

SEXP parse(SEXP r_instance){
MyStruct c_instance = MAKE_S4_INTO_STRUCT(r_instance);
printf("%g %d\n", c_instance->x[0], c_instance->y[0]);
return R_NilValue;
}

是否有 MAKE_S4_INTO_STRUCT 函数可以实现此功能?我没有在 Hadley's C interface page 中找到答案或 R extensions manual .

最佳答案

遗憾的是,“我希望有一匹小马” 方法并不总是有效。

但是通过创建 as<>()wrap()来自 Rcpp 的转换器,你可以自己建立这样一个设施。查看现有的 S4 转换器示例 here或者 here寻找灵感。

简而言之,您的 struct尚不作为 R 类型或 Rcpp 类型存在,因此您必须提供映射。完成后,事情应该变得很顺利,因为您添加的转换器将被称为“按需”。

也就是说,编写这样的转换器可能不是您在第一天使用 Rcpp 时应该做的......

关于c - 使用 .Call() 将 s4 对象发送到 C 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30586297/

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