[英]Convert arma:vec to NumericVector in Rcpp
我尝试在 RcppArmadillo 中使用分位数 function,但是,在教程中,分位数 function 的 output 是 arma::vec(output 的 class in 8814664"82"arraytrix"")
我想将它转换为 NumericVector。 我尝试使用以下代码:
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
using namespace Rcpp;
using namespace arma;
// quantile function
// [[Rcpp::export]]
NumericVector quantile_f(vec V, vec P) {
vec Q = quantile(V, P);
NumericVector Q_output = as<NumericVector>(wrap(Q));
return (Q_output);
}
我点击了链接来执行此操作。 但我仍然在 R =“矩阵”“数组”中得到 class。
有人能帮忙吗? 感谢!
(请不要发布图片。首选文档链接。)
你不需要转换它:
// force return as a vector rather than single column matrix
#define RCPP_ARMADILLO_RETURN_ANYVEC_AS_VECTOR
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::export]]
arma::vec quantile_f(arma::vec V, arma::vec P) {
return arma::quantile(V, P);
}
/*** R
set.seed(123)
quantile_f(rnorm(1000), c(0, 0.25, 0.5, 0.75, 1.0))
*/
> Rcpp::sourceCpp("~/git/stackoverflow/73979000/answer.cpp")
> set.seed(123)
> quantile_f(rnorm(1000), c(0, 0.25, 0.5, 0.75, 1.0))
[1] -2.80977468 -0.62874241 0.00920964 0.66478787 3.24103993
>
当然,在内部,当 Armadillo 向量变成 R 向量(即我们的Rcpp::NumericVector
)的 C++ 变体时,会发生等效转换。 但是现有代码足以为您自动执行此操作。
Edit One 还可以显式地将维度属性从 n × 1 矩阵重置为长度为 1 的向量:
// [[Rcpp::export]]
Rcpp::NumericVector quantile_f2(arma::vec V, arma::vec P) {
arma::vec v = arma::quantile(V, P);
Rcpp::NumericVector w = Rcpp::NumericVector(Rcpp::wrap(v));
w.attr("dim") = static_cast<int>(v.n_elem);
return w;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.