Re: [R-pkg-devel] Unable to access log operator in C
Thank you, Dirk. However, I am an absolute clod.I just realized; I was passing in the SEXP indicating whether or not to log the function as "log", so I "overwrote" the symbol. Excuse me while I go bang my head into the wall a few dozen times. My apologies, Avi On Wed, Feb 28, 2024 at 7:14 PM Dirk Eddelbuettel wrote: > > > On 28 February 2024 at 19:05, Avraham Adler wrote: > | I am hoping the solution to this question is simple, but I have not > | been able to find one. I am building a routine in C to be called from > | R. I am including Rmath.h. However, when I have a call to "log", I get > | the error "called object 'log' is not a function or a function > | pointer. When I "trick" it by calling log1p(x - 1), which I *know* is > | exported from Rmath.h, it works. > | > | More completely, my includes are: > | #include > | #include > | #include > | #include > | #include // for NULL > | #include > | > | The object being logged is a double, passed into C as an SEXP, call it > | "a", which for now will always be a singleton. I initialize a pointer > | double *pa = REAL(a). I eventually call log(pa[0]), which does not > | compile and throws the error listed above. Switching the call to > | log1p(pa[0] - 1.0) works and returns the proper answer. > | > | Even including math.h explicitly does not help, which makes sense as > | it is included by Rmath.h. > > Can you show the actual line? Worst case rename your source file to end in > .cpp, include and call std::log. > > > Rcpp::cppFunction("double mylog(double x) { return std::log(x); }") > > mylog(exp(42)) > [1] 42 > > > > Dirk > > -- > dirk.eddelbuettel.com | @eddelbuettel | e...@debian.org __ R-package-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-package-devel
Re: [R-pkg-devel] Unable to access log operator in C
On 28 February 2024 at 19:05, Avraham Adler wrote: | I am hoping the solution to this question is simple, but I have not | been able to find one. I am building a routine in C to be called from | R. I am including Rmath.h. However, when I have a call to "log", I get | the error "called object 'log' is not a function or a function | pointer. When I "trick" it by calling log1p(x - 1), which I *know* is | exported from Rmath.h, it works. | | More completely, my includes are: | #include | #include | #include | #include | #include // for NULL | #include | | The object being logged is a double, passed into C as an SEXP, call it | "a", which for now will always be a singleton. I initialize a pointer | double *pa = REAL(a). I eventually call log(pa[0]), which does not | compile and throws the error listed above. Switching the call to | log1p(pa[0] - 1.0) works and returns the proper answer. | | Even including math.h explicitly does not help, which makes sense as | it is included by Rmath.h. Can you show the actual line? Worst case rename your source file to end in .cpp, include and call std::log. > Rcpp::cppFunction("double mylog(double x) { return std::log(x); }") > mylog(exp(42)) [1] 42 > Dirk -- dirk.eddelbuettel.com | @eddelbuettel | e...@debian.org __ R-package-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-package-devel
[R-pkg-devel] Unable to access log operator in C
I am hoping the solution to this question is simple, but I have not been able to find one. I am building a routine in C to be called from R. I am including Rmath.h. However, when I have a call to "log", I get the error "called object 'log' is not a function or a function pointer. When I "trick" it by calling log1p(x - 1), which I *know* is exported from Rmath.h, it works. More completely, my includes are: #include #include #include #include #include // for NULL #include The object being logged is a double, passed into C as an SEXP, call it "a", which for now will always be a singleton. I initialize a pointer double *pa = REAL(a). I eventually call log(pa[0]), which does not compile and throws the error listed above. Switching the call to log1p(pa[0] - 1.0) works and returns the proper answer. Even including math.h explicitly does not help, which makes sense as it is included by Rmath.h. Thank you, Avi __ R-package-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-package-devel