r - 为什么在 Rcpp 中使用“pnorm”时出现错误
问题描述
我需要arma::
在我的 Rcpp 代码中包含变量。但是我在尝试使用糖功能时遇到了问题pnorm
。这是一个演示:
#include <RcppArmadillo.h>
#include <RcppArmadilloExtensions/sample.h>
// [[Rcpp::depends(RcppArmadillo)]]
using namespace Rcpp;
// [[Rcpp::export]]
double pget(NumericVector x, NumericVector beta) {
arma::colvec xx = Rcpp::as<arma::colvec>(x) ;
arma::colvec bb = Rcpp::as<arma::colvec>(beta) ;
double tt = as_scalar( arma::trans(xx) * bb);
double temp = Rcpp::pnorm(tt);
return temp;
}
然后我得到一个错误:no matching function for call to 'pnorm5'
这是否意味着我不能使用Rcpp::pnorm
???
解决方案
Rcpp
糖函数适用于矢量类型参数,例如Rcpp::NumericVector
. 对于标量参数,您可以使用R
命名空间中的函数:
#include <RcppArmadillo.h>
#include <RcppArmadilloExtensions/sample.h>
// [[Rcpp::depends(RcppArmadillo)]]
using namespace Rcpp;
// [[Rcpp::export]]
double pget(NumericVector x, NumericVector beta) {
arma::colvec xx = Rcpp::as<arma::colvec>(x) ;
arma::colvec bb = Rcpp::as<arma::colvec>(beta) ;
double tt = as_scalar( arma::trans(xx) * bb);
double temp = R::pnorm(tt, 0.0, 1.0, 1, 0);
return temp;
}
/*** R
x <- rnorm(5)
beta <- rnorm(5)
pget(x, beta)
*/
顺便说一句,这里有两种变体。第一个变体使用arma
而不是Rcpp
向量作为参数。由于这些是const
引用,因此不会复制任何数据。此外,arma::dot
还使用:
// [[Rcpp::export]]
double pget2(const arma::colvec& xx, const arma::colvec& bb) {
double tt = arma::dot(xx, bb);
return R::pnorm(tt, 0.0, 1.0, 1, 0);
}
第二个变体计算标量积而不使用犰狳:
// [[Rcpp::export]]
double pget3(NumericVector x, NumericVector beta) {
double tt = Rcpp::sum(x * beta);
return R::pnorm(tt, 0.0, 1.0, 1, 0);
}
推荐阅读
- python - 在 Seaborns `distplot` 中保留密度图直方图的同时删除 KDE 线
- r - 如何将参数捕获到函数并在另一个上下文/环境中应用它们
- jquery - 事件未出现在浏览器中
- c# - C# 异步任务
结果为 System.Threading.Tasks.Task 1[System.String] - python - Lending Club Folio 二级市场列表 API 调用不起作用
- java - 绘制正方形时按键问题
- python - 什么是 pytorch 的 conv1d 的 Tensorflow 等价物?
- r - 如何将具有相同协变量的个体的二项式响应数据分解为伯努利,反之亦然?
- c# - 如何指定在请求中使用的 IP 地址?
- c# - 我怎样才能有一个 .txt 文件,我从中读取行并将它们放入数组中,但是每一行在某个字符之后被分割