首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何将参数传递到cppFunction中

如何将参数传递到cppFunction中
EN

Stack Overflow用户
提问于 2016-12-11 07:24:14
回答 1查看 116关注 0票数 1

当我们使用Rcpp时,我很困惑如何将参数传递到cppFunction中。特别是,我想知道是否有人能解释以下代码的结果。

代码语言:javascript
代码运行次数:0
运行
复制
library(Rcpp)
cppFunction("void test(double &x, NumericVector y) {
    x = 2016;
    y[0] = 2016;
}")
a = 1L
b = 1L
c = 1
d = 1
test(a,b)
test(c,d)
cat(a,b,c,d) #this prints "1 1 1 2016"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-11 09:02:29

如前所述,Rcpp围绕R的SEXP对象建立了方便的类。

  • 对于第一个参数,double类型没有默认的SEXP对象。这是因为在R中,没有标量这样的东西。因此,新内存被分配,使得&引用不兼容。因此,修改的变量范围仅限于函数,并且从未对结果进行更新。因此,对于这两个测试用例,您将看到1
  • 对于第二种情况,对象类之间存在不匹配。在提供的第一个调用对象中,由于末尾附加了integer,所以提供的对象类型为L,这与C++函数所期望的numeric类型相冲突。当L作为对象实例化为numeric时,这个问题就会得到解决。因此,不需要创建具有正确类型的中间内存位置才能接收值。因此,第二种情况下的修改能够传播回R。

例如:

代码语言:javascript
代码运行次数:0
运行
复制
a = 1L
class(a)
# "integer"
a = 1
class(a)
# "numeric"
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41083921

复制
相关文章

相似问题

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