gpt4 book ai didi

c++ - Rcpp:将两个 NumericVectors 相乘,同时对其中一个进行子集化

转载 作者:行者123 更新时间:2023-11-30 05:05:56 25 4
gpt4 key购买 nike

我有两个 NumericVectors AB。预先对 vector B 进行子集化时,以下乘法工作正常:

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

当我尝试做的时候

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

它会产生错误

invalid operands to binary expression ('NumericVector' (aka 'Vector<14>') and 'SubsetProxy<14, PreserveStorage, 14, true, Rcpp::sugar::Minus_Vector_Primitive<14, true, Rcpp::Vector<14, PreserveStorage> > >')

我想这是 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;
}

和使用 myFunR 代码:

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)
*/

然后source并查看结果:

library(Rcpp)
sourceCpp("myFun.cpp")

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

关于c++ - Rcpp:将两个 NumericVectors 相乘,同时对其中一个进行子集化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48155144/

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