我有两个NumericVectors
A
和B
。预先设置 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