0

在此处.C的 R 函数文档中,它说 C 函数本身必须是返回类型。我正在处理一些使用该函数(而不是Rcpp)的继承代码,但我想编写一个“返回”未知大小向量的函数。如果我知道这个向量的大小,我可以在 R 中分配它并将指针传递给 C,然后可以修改其内容。鉴于我不知道它的大小,在 R 中声明它的方法是什么?我想它会有这个形状,但我不知道细节:void.C.Call

output <- ?????
storage.mode(a) <- "integer"
tmp <- .C("myfunc",a,output)
4

1 回答 1

3

我建议您使用.Call()而不是.C()- 请参阅 r-devel 列表上的最近讨论。我猜你会发现几乎没有经验丰富的 R 开发人员建议将其.C()用于新项目。

这是一个简单的说明。您绝不会被迫使用 Rcpp,同样的代码也可以用普通的 C API 编写,尽管不是那么紧凑:

R> fx <- rcpp(signature(sn="integer"), body='   // rcpp() is from inline 0.3.10
+    int size = as<int>(sn);
+    IntegerVector v(size); 
+    for (int i=0; i<size; i++) v[i] = i;
+    return(v); 
+ ') 
R> fx(3) 
[1] 0 1 2   
R> fx(7) 
[1] 0 1 2 3 4 5 6  
R>

在旧.C()接口中,您只能返回诸如*intor之类的原子 C 类型,*double并且您不能在 C 级别分配空间,因为您只能SEXP在实际可以返回对象时“标记”对象以供 R 管理SEXP——而且只能如此.Call()

于 2012-10-05T20:11:28.500 回答