【发布时间】:2022-12-14 06:50:43
【问题描述】:
我希望构建一个包,但我使用 RcppArmadillo 编写了其中的一部分,现在我正在承受后果。我正在使用 roxygen2 和 devtools 来帮助我处理 DESCRIPTION 和 NAMESPACE。我在 R / Ubuntu 中编码。在描述中,我包括两行来加载包:
取决于:R (>= 3.4.4)、质量 (>= 7.3-49)、Rcpp (>= 1.0.5)、RcppArmadillo (>= 0.9.900.2.0) 链接到:Rcpp,RcppArmadillo
在文件夹 /src 中我写了一个脚本名称 loss_function.cpp,里面有:
> // [[Rcpp::depends(RcppArmadillo)]] > > #include <RcppArmadillo.h> > > using namespace Rcpp; > > //' Check function. > //' > //' @param x vector > //' @param tau percentile > //' @return y new vector > // [[Rcpp::export(rho_koenker)]] > arma::vec rho_koenker(arma::vec x, double tau){ > int n = x.n_elem; > arma::vec y(n); > for(int i = 0; i < n; ++i){ > if(x(i)<0){ > y(i) = x(i)*(tau-1); > } else { > y(i) = x(i)*tau; > } > } > return(y); > } > > //' Quantile regression loss function > //' > //' @param beta parameter > //' @param x matrix > //' @param y vector > //' @param tau percentile > //' @param N total number of observations > //' @param d beta's length > //' @return eta numeric > // [[Rcpp::export(loss_qr)]] > double loss_qr(arma::vec beta, arma::mat x, arma::vec y, double tau, int N, int d){ > double eta = 0; > arma::vec res(N); > arma::vec rho(N); > res = y - (x * beta); > rho = rho_koenker(res,tau); > eta = accu(rho); > return(eta); > }当我检查包(build -> check package)时出现一条错误消息:
Error in .Call("_pqfe_loss_qr", PACKAGE = "pqfe", beta, x, y, tau, N, : "_pqfe_loss_qr" not available for .Call() for package "pqfe" Calls: qr ... optim_qr -> <Anonymous> -> <Anonymous> -> fn -> .Call Execution halted Warning message: Can't find generic `sew` in package knitr to register S3 method. This message is only shown to developers using devtools. Do you need to update knitr to the latest version?
【问题讨论】:
-
您似乎有一个错误表明
devtools和knitr两者都不是RcppArmadillo暗示的。也许只尝试一次R CMD build ...和R CMD check?对于它的价值,作为RcppArmadillo的作者和维护者,我写了很多包含它的软件包,我也使用roxygen2,但我认为你在这里有一个不相关的问题。也许修剪和简化?还是从RcppArmadillo.package,skeleton()开始,逐步建立起来?
标签: r build roxygen2 rcpparmadillo