我有两个NumericVectors AB。预先设置 vector B时,以下乘法效果很好:

NumericVector B_sub  = B[A - 1];
NumericVector res    = A * B_sub;

当我尝试去做
NumericVector res = A * B[A - 1];

它产生错误



我想这是C++中的常见错误类型。我是一名经济学专业的学生,​​涉足R和python,但是C++对我来说是一个新世界。

那么,为什么使用Rcpp语法糖无效该操作?有没有一种方法可以使用类型转换或类似方法实现?

这是可重现的 myFun.cpp 文件:
#include <Rcpp.h>

using namespace std;
using namespace Rcpp;

// [[Rcpp::export]]
NumericVector myFun(NumericVector B) {
  NumericVector A      = wrap(seq_len(B.size()));
  NumericVector B_sub  = B[A - 1];
  NumericVector res    = A * B_sub;
  // NumericVector res = A * B[A - 1];
  return res;
}

R代码以使用myFun:
library(Rcpp)
sourceCpp("myFun.cpp")
myFun(1:10)

最佳答案

您可以使用as<NumericVector>()。创建以下“myFun.cpp”:

#include <Rcpp.h>

using namespace Rcpp;

// [[Rcpp::export]]
NumericVector myFun(NumericVector B) {
    NumericVector A   = wrap(seq_len(B.size()));
    NumericVector res = A * as<NumericVector>(B[A - 1]);
    return res;
}

/*** R
myFun(1:10)
*/

然后来源并查看结果:
library(Rcpp)
sourceCpp("myFun.cpp")

> myFun(1:10)
 [1]   1   4   9  16  25  36  49  64  81 100

10-04 23:44