我有两个NumericVectors
A
和B
。以下乘法在事先对向量B
进行子集化时工作正常:
NumericVector B_sub = B[A - 1];
NumericVector res = A * B_sub;
当我尝试
时NumericVector res = A * B[A - 1];
它会产生错误
二进制表达式的无效操作数('NumericVector'(又名'Vector< 14>')和'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;
}
和 R-Code 使用myFun
:
library(Rcpp)
sourceCpp("myFun.cpp")
myFun(1:10)
答案 0 :(得分:1)
您可以使用18
。创建以下&#34; myFun.cpp&#34;:
as<NumericVector>()
然后来源并查看结果:
#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)
*/