On 25/04/2021 10:30 p.m., Cai Li wrote:
Thanks Duncan! I was advised not to export those functions in the
namespace and keep them as internals. In terms of this, could you advise
what specific changes should I make to the C code so that I can evaluate
them in a suitable environment? I tried something like
"PROTECT(func_R=lang2(install("Package:::R_function"), func_data))," but
it did not work. Sorry this may be too naive and thanks again.
That line creates the expression to evaluate, it doesn't evaluate it.
You need to call eval() (the C function) on the result. Here's some
code from rgl that does something similar:
R code to initialize:
rgl.init <- function(initValue = 0, onlyNULL = FALSE, debug =
getOption("rgl.debug", FALSE))
.Call( rgl_init,
initValue, onlyNULL, environment(rgl.init), debug )
The important thing here is "environment(rgl.init)", which is the
private environment within the package.
Then in C code, save that environment:
rglNamespace = in_namespace;
and use it later:
result = eval(PROTECT(lang2(PROTECT(install("rglFonts")),
PROTECT(ScalarString(mkChar(family))))), rglNamespace);
Duncan Murdoch
Cai
On Sun, Apr 25, 2021 at 8:46 PM Duncan Murdoch <murdoch.dun...@gmail.com
<mailto:murdoch.dun...@gmail.com>> wrote:
On 25/04/2021 7:23 p.m., Cai Li wrote:
> Hello All,
>
> I'm developing a package with C code. My question may be naive: I
have
> several internal R functions that need to be called by C, but I
cannot get
> it to work or find a solution. It can work if I export those internal
> functions in namespace, but it fails if I just want to keep them as
> internal functions without exporting them. I guess I need some
flags to
> indicate the "internal" R internal functions? Could you please
share your
> thoughts on how to fix this? Much appreciated in advance!
>
> // set up call to R function "R_function"
> SEXP func_R;
> PROTECT(func_R=lang2(install("R_function"), func_data));
>
It all depends on the environment where you evaluate that expression,
just as it would if it was R code. You can't see internal package
functions from the global environment, you need to evaluate them in the
package namespace environment.
Duncan Murdoch
______________________________________________
R-package-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-package-devel