Rcpp:NumericVector输入和输出更改原始输入数据,但IntegerVector不会

时间:2018-07-10 03:39:34

标签: r rcpp

我是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

只是想知道为什么会这样。

0 个答案:

没有答案