我是Rcpp的新手,目前正在尝试。在一个玩具代码中,我尝试将向量中的偶数替换为数字2。
在一种情况下,我使用NumericVector作为输入和输出数据类型,在另一种情况下,我使用了IntegerVector。
#include <Rcpp.h>
using namespace Rcpp;
using namespace std;
// [[Rcpp::export]]
NumericVector replaceEven(NumericVector x) {
for (int i = 0; i < x.length(); i++) {
if (fmod(x[i], 2) == 0) {
x[i] = x[i] * 2;
}
}
return x;
}
sourceCpp("RcppReplaceEven.cpp")
> y = c(1,2,3,4)
> replaceEven(y)
[1] 1 4 3 8
> y
[1] 1 4 3 8
但是,用IntegerVector替换NumericVector之后,结果是
> y = c(1,2,3,4)
> replaceEven(y)
[1] 1 4 3 8
> y
[1] 1 2 3 4
只是想知道为什么会这样。