首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用.Call()将s4对象发送到C结构

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

Stack Overflow用户
提问于 2015-06-02 02:19:53
回答 1查看 139关注 0票数 0

我希望将一个简单的s4对象传递到C中,并将其转换为一个简单的结构。我想象的R代码就像

代码语言:javascript
复制
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

代码语言:javascript
复制
#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扩展手册中找到答案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-02 02:28:13

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

但是,通过从Rcpp中创建as<>()wrap()转换器,您可以构建这样一个工具。有关灵感,请参阅现有的S4转换器示例这里这里

简而言之,您的struct还没有以R类型或Rcpp类型存在,所以您必须提供映射。一旦你这么做了,事情就会变得很有趣,因为你添加的转换器会被称为“按需”。

尽管如此,在使用Rcpp的第一天,编写这样的转换器可能不是你应该做的事情。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30586297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档