gpt4 book ai didi

r - 使用 Rcpp 从 C++ 调用 R 函数

转载 作者:行者123 更新时间:2023-12-01 01:20:25 25 4
gpt4 key购买 nike

我正在自学 Rcpp 并注意到 Rcpp 糖没有示例功能。所以我决定从 C++ 调用基础库中的示例函数。我有两个问题:

1.关于参数概率的类型,我应该使用 NumericVector 吗?使用矢量类型是否合法?

2。关于输出类型,我应该使用 IntegerVector 吗?使用 NumericVector 类型合法吗?

似乎所有这些类型都很好(见下面的代码),但我想知道哪种类型更好用。

<!-- language-all: lang-html -->
library(inline)
library(Rcpp)

src1 <- '
RNGScope scope;

NumericVector thenum(1),myprob(3);

myprob[0]=0.1;
myprob[1]=0.5;
myprob[2]=0.4;

Environment base("package:base");
Function sample = base["sample"];

thenum = sample(3,Named("size",1),Named("prob",myprob));

return wrap(thenum);
'


src2 <- '
RNGScope scope;

IntegerVector theint(1);
vector<double> myprob(3);
myprob[0]=0.1;
myprob[1]=0.5;
myprob[2]=0.4;
Environment base("package:base");
Function sample = base["sample"];

theint = sample(3,Named("size",1),Named("prob",myprob));

return wrap(theint);
'


fun1 <- cxxfunction(signature(),body=src1,plugin="Rcpp")
fun2 <- cxxfunction(signature(),body=src2,include='using namespace std;',plugin="Rcpp")

fun1() ## work!
fun2() ## oh this works too!

最佳答案

因为您是从 R 中调用 sample(),所以整数和数字的工作方式就像它们在 R 中一样:

R> set.seed(42); sample(seq(1L, 5L), 5, replace=TRUE)
[1] 5 5 2 5 4
R> set.seed(42); sample(seq(1.0, 5.0), 5, replace=TRUE)
[1] 5 5 2 5 4
R>

关于r - 使用 Rcpp 从 C++ 调用 R 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12224954/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com