[Rd] setting environmental variable inside R function to call C function

Dirk Eddelbuettel edd at debian.org
Tue Jun 3 20:49:40 CEST 2014


I suspect the intend is to send a value from R to compiled code.  Which
happens to be a problem for which Rcpp offers a pretty convenient solution.  

And if you really, really want to, you can even program in C inside of an
Rcpp interface:

R> cppFunction("int foo(std::string txt) { Rprintf(\"Var is %s\\n\", txt.c_str()); return 0; }")
R> foo("A")
Var is A
[1] 0
R> 

Dirk



On 3 June 2014 at 19:06, Barry Rowlingson wrote:
| What does c_fun look like? Here's mine:
| 
| #include <stdio.h>
| #include <stdlib.h>
| void c_fun(){
|   printf("TMP is %s\n", getenv("TMP"));
|     }
| 
| and I then do this at the shell prompt:
| 
| R CMD SHLIB c_fun.c
| 
| and this at the R prompt:
| 
| dyn.load("c_fun.so")
| wrapper()
| 
| and I get:
| 
| > wrapper()
| [1] "A"
| TMP is A
| list()
| 
| Is that not what you want?
| 
| tldr; works for me.
| 
| 
| On Tue, Jun 3, 2014 at 5:55 PM, Bowen Meng <bowen.m04 at gmail.com> wrote:
| > wrapper <- function(){
| >   Sys.setenv(TMP="A")
| >   print(Sys.getenv("TMP"))
| >
| >   .C("c_fun")
| > }
| >
| >
| > As the example above, I hope to set an env var $TMP inside the R function
| > "wrapper", which affects the functionality of the C function call "c_fun".
| > Also the print line shows that $TMP is set to be "A", but the function call
| > of "c_fun" was not affected.
| >
| > Does anyone know why and how to correctly set the env var for subsequent
| > functions?
| >
| > Thanks,
| > BW
| >
| >         [[alternative HTML version deleted]]
| >
| > ______________________________________________
| > R-devel at r-project.org mailing list
| > https://stat.ethz.ch/mailman/listinfo/r-devel
| 
| ______________________________________________
| R-devel at r-project.org mailing list
| https://stat.ethz.ch/mailman/listinfo/r-devel

-- 
Dirk Eddelbuettel | edd at debian.org | http://dirk.eddelbuettel.com



More information about the R-devel mailing list