使用 .Call() 将 s4 对象发送到 C 结构
Use .Call() to send an s4 object to a C struct
我想将一个简单的 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 or the R extensions manual.
中找到答案
我想将一个简单的 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 or the R extensions manual.