[Rd] Linking to the BH package introduces CRAN warnings
Romain Francois
romain at r-enthusiasts.com
Wed Nov 5 14:11:54 CET 2014
Envoyé de mon iPhone
> Le 5 nov. 2014 à 13:43, Dirk Eddelbuettel <edd at debian.org> a écrit :
>
>
> On 5 November 2014 at 00:55, kaveh wrote:
> | Dear all,
> |
> |
> | the simple code in below, when send to the
> | win-builder returns the following (and no other)
> | warning:
> |
> |
> | * checking compiled code ... WARNING
> | File 'quicky/libs/i386/quicky.dll':
> | Found '_ZSt4cerr', possibly from 'std::cerr' (C++)
> | Object: 'quicky.o'
> | Found 'abort', possibly from 'abort' (C), 'runtime' (Fortran)
> | Object: 'quicky.o'
> | File 'quicky/libs/x64/quicky.dll':
> | Found '_ZSt4cerr', possibly from 'std::cerr' (C++)
> | Object: 'quicky.o'
> | Found 'abort', possibly from 'abort' (C), 'runtime' (Fortran)
> | Object: 'quicky.o'
> |
> | Compiled code should not call entry points which might terminate R nor
> | write to stdout/stderr instead of to the console, nor the C RNG.
> |
> | See 'Writing portable packages' in the 'Writing R Extensions' manual.
> |
> |
> | Here is the source:
> |
> | #include <algorithm>
> | #include <cstdlib>
> | #include <ctime>
> | #include <functional>
> | #include <fstream>
> | #include <iostream>
> | #include <math.h>
> | #include <time.h>
> | #include <stdio.h>
> | #include <stdlib.h>
> | #include <sstream>
> | #include <vector>
> | #include <random>
> |
> | #include <boost/math/distributions/normal.hpp>
> | #include <boost/math/distributions/chi_squared.hpp>
> |
> | #include <Eigen/Dense>
> |
> | using namespace std;
> | using namespace Eigen;
> | using Eigen::MatrixXd;
> | using Eigen::VectorXd;
> | using Eigen::VectorXi;
> | using Eigen::RowVectorXd;
> |
> |
> | using boost::math::chi_squared;
> | using boost::math::quantile;
> | using boost::math::complement;
> | using boost::math::normal_distribution;
> | using namespace boost::math::policies;
> |
> | typedef policy<
> | promote_double<true>
> | > my_policy_norm;
> | typedef policy<
> | promote_double<true>
> | > my_policy_chi2;
> |
> | typedef boost::math::normal_distribution<double,my_policy_norm> my_norm;
> | typedef boost::math::chi_squared_distribution<double,my_policy_chi2>
> | my_chi2;
> |
> |
> | VectorXd GetQs(const VectorXd& x){
> | const int n=x.size();
> | double mytol=1e-8;
> | double the_max=x.maxCoeff();
> | double the_min=x.minCoeff();
> | double the_rag=(the_max-the_min);
> | if(the_rag<mytol) return(x);
> | if(1.0-the_max<mytol) return(x);
> | if(the_min<mytol) return(x);
> | VectorXd y=x.array();
> | for(int i=0;i<n;i++)
> | y(i)=sqrt(quantile(complement(my_chi2(1.0),x(i))));
> | return(y);
> | }
> | extern "C"{
> | void quicky(int* rn,double* xi,double* yi){
> | const int n=*rn;
> | VectorXd x=Map<VectorXd>(xi,n);
> | Map<VectorXd>(yi,n)=GetQs(x);
> | }
> | }
> |
> |
> | So I guess, I should fill a bug report with the
> | BH maintainer?
>
> Err, why? BH does nothing wrong.
Calls to these forbidden fruits come from the BH tree so ...
> You are NOT forced or required to use the Boost distributions header __as R
> comes with the equivalent functionality__ via the Rmath.h header file from R.
> Which has functionality that Rcpp provides to you in scalar and vector form.
>
> And there are probably several dozen examples of using the R distribution
> functions from Rcpp.
>
> So this is _precisely_ what I suggested several mails ago: do your homework,
> identify which header is causing it. And the obvious next step is then to
> not use the header.
So why these headers are shipped with BH then.
> Dirk
>
>
> | Best regards,
> |
> |
> | On 2014-11-04 23:52, Dirk Eddelbuettel wrote:
> | > Gentlemen,
> | >
> | > On 4 November 2014 at 23:36, kaveh wrote:
> | > | Dear Hadley,
> | > |
> | > | Thank you for this information, maybe the CRAN gods
> | > | will look favourably on this case too,
> | >
> | > You seemed to have missed a point my earlier email tried to stress: Inclusion
> | > of BH does not lead to the warning.
> | >
> | > All this depends on WHICH headers are included, and the OP will need to sort
> | > this out by modifying his code.
> | >
> | > Dirk
> | >
> | > | Best regards,
> | > |
> | > | On 2014-11-04 23:32, Hadley Wickham wrote:
> | > | >>> | However, it seems some of the codes in the BH package
> | > | >>> | might. At any rate, when I include some boost headers such as
> | > | >>> | boost/math/distributions/ through BH, I get the following warnings
> | > | >>> | when submitting to the win-builder page:
> | > | >>> |
> | > | >>> |
> | > | >>> | Found '_ZSt4cerr', possibly from 'std::cerr' (C++)
> | > | >>> |
> | > | >>> | Found 'abort', possibly from 'abort' (C), 'runtime' (Fortran)
> | > | >>> |
> | > | >>> | Found '_ZSt4cerr', possibly from 'std::cerr' (C++)
> | > | >>> |
> | > | >>> | Found 'abort', possibly from 'abort' (C), 'runtime' (Fortran)
> | > | >> You’re kind of out of luck. These functions are both:
> | > | >> - used by the boost headers
> | > | >> - forbidden by R, well at least forbidden by CRAN
> | > | > Maaaaybe - I had this note in RSQLite, and CRAN seemed ok with my explanation:
> | > | >
> | > | > * checking compiled code ... NOTE
> | > | > File ‘/Users/hadley/Documents/databases/RSQLite.Rcheck/RSQLite/libs/RSQLite.so’:
> | > | > Found ‘___stderrp’, possibly from ‘stderr’ (C)
> | > | > Object: ‘sqlite-all.o’
> | > | >
> | > | > This is in C code from the embedded SQLite database.
> | > | >
> | > | >
> | > | > Hadley
> | > | >
> | > |
> | >
> |
>
> --
> http://dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org
More information about the R-devel
mailing list