在R here中.C
函数的文档中,它表示C函数本身必须是返回类型void
。我正在研究一些使用.C
函数(而不是.Call
或Rcpp)的继承代码,但我想写一个“返回”未知大小的向量的函数。如果我知道这个向量的大小,我可以在R中分配它并将指针传递给C,然后可以修改其内容。鉴于我不知道它的大小,在R中声明它的方法是什么?我想它会有这种形状,但我不知道细节:
output <- ?????
storage.mode(a) <- "integer"
tmp <- .C("myfunc",a,output)
答案 0 :(得分: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()
界面中,您只能返回*int
或*double
等原子C类型,而无法在C级别分配空间只有SEXP
对象可以“标记”SEXP
对象以供R管理,并且只有.Call()
可以。