Hi All, I have a few small questions about the usage of the C findVar( ) function when used in C code called with '.Call'. In my case I create an R function with an argument. This function calls some C code in which I use findVar( ) to retrieve the values from the argument. Ofcourse normally I would just give the values as argument to .Call, but in my project I need to use findVar for various reasons (can elaborate if needed, but it's not really relevant..) Below is a small example of an R function and the C code in which the problem shows: (skip to bold 'question' part if this is allready known)
----------# R function #-------- f <- function(x) { .Call("envtest", environment()) } ----------# C function #-------- SEXP envtest(SEXP rho) { SEXP data; PROTECT(data = allocVector(REALSXP, 1)); data = findVar(install("x"), rho); UNPROTECT(1); return(data); } ----------# END #----------- The result of this function is that it should print the contents of whatever is passed to the function f(x). But when executing the function, the result is: > f(10) <promise: 0x142db20> Ofcourse this is due to lazy-evaluation as I've also read in the thread http://www.nabble.com/confusion-about-evaluation.-to18561135.html#a18563086 here . To 'fix' it, I would need to do 'something' with 'x', so changing the function f() to: f <- function(x) { x = x .Call("envtest", environment()) } works as can be shown with: > f(10) [1] 10 ---------- My question on this subject is, how can I work around this 'x = x' or other similar statement (print(x) to prevent lazy-evaluation? To summarize, I would like to use findVar to retrieve values from R objects which are given as function arguments to the R-function and not to the C-function. Other than the above question, I'd also like to know if findVar( ) by default also checks parent environments (inherits argument?) when the object can not be found in the given environment (if not, should I look into passing the environment Hash etc?). And, as a last question, how can I retrieve the value from the R-constant 'pi' using findVar? If I try this I receive the error "REAL can only be applied to 'numeric' not a 'promise'". Thank you for any solutions or insights in these subjects, if more details are needed I'm happy to give them! Marcel Kempenaar ---------------- > sessionInfo() R version 2.9.1 (2009-06-26) x86_64-pc-linux-gnu locale: LC_CTYPE=en_US.UTF-8;LC_NUMERIC=C;LC_TIME=nl_NL.UTF-8;LC_COLLATE=C;LC_MONETARY=C;LC_MESSAGES=en_US.UTF-8;LC_PAPER=nl_NL.UTF-8;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=en_US.UTF-8;LC_IDENTIFICATION=C attached base packages: [1] stats graphics grDevices utils datasets methods base -- View this message in context: http://www.nabble.com/Problem-using-findVar%28-%29-in-combination-with-R%27s-lazy-evaluation-tp25061253p25061253.html Sent from the R devel mailing list archive at Nabble.com. ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel