【发布时间】:2018-07-27 06:42:44
【问题描述】:
我正在尝试将 Rcpp 糖的 ifelse() 命令与 arma::vec 一起使用。代码失败并出现错误
'ifelse' was not declared in this scope
我找不到解决方案。下面是一个简单的示例代码(导致错误)。
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::export]]
arma::vec f(arma::vec x, arma::vec y) {
arma::vec res1 = Rcpp::ifelse(x < y, x, y);
arma::vec res = trans(res1)*y;
return res;
}
/*** R
f(c(1,2,3),c(3,2,1))
*/
【问题讨论】:
-
您需要使用
Rcpp::ifelse,但这不适用于arma::vec。 -
@F. Privé 我根据您的建议编辑了代码。有没有办法同时使用犰狳(用于矩阵计算)和 rcpp 糖?
-
我不这么认为。 Rcpp 糖用于 Rcpp 类型。
-
C++ 是一种静态类型的面向对象语言。适用于一种类型(即
Rcpp::NumericVector)的东西不一定适用于另一种类型(即arma::vec)。 -
谢谢。我只是想知道是否有一些命令可以强制
R中的as.double或as.data.frame等类型。例如as.Numeric.Vector这里。但是好像没有。