我希望将一个简单的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的C接口页面或R扩展手册中找到答案。
发布于 2015-06-02 02:28:13
可悲的是,“我希望有一匹小马”的方法并不总是奏效。
但是,通过从Rcpp中创建as<>()和wrap()转换器,您可以构建这样一个工具。有关灵感,请参阅现有的S4转换器示例这里或这里。
简而言之,您的struct还没有以R类型或Rcpp类型存在,所以您必须提供映射。一旦你这么做了,事情就会变得很有趣,因为你添加的转换器会被称为“按需”。
尽管如此,在使用Rcpp的第一天,编写这样的转换器可能不是你应该做的事情。
https://stackoverflow.com/questions/30586297
复制相似问题