[Rd] R-2.0.0 findVar and findFun question
Matjaz Kukar
matjaz.kukar at fri.uni-lj.si
Fri Oct 8 22:21:32 CEST 2004
Peter Dalgaard wrote:
>
> Can't see anything relevant changed recently...
>
Well, the visible change for me was that findVar now for generic functions
does not return the correct object, and so findFun should be used. Although
this is probably a consequence of some deeper change.
> I can see that findFun gives an error if the function is not found,
> which I presume is what you call a "crash".
Not really. On WinXP this crash was access violation in some system code.
> However, your workaround
> wouldn't catch the situation where a variable exists, but none of the
> versions in the search path are functions.
> I think you want to use findVar1() instead.
>
Indeed. Thank you for this tip. Although so far I didn't run into such
a situation, I changed the code to the following:
// First we try to find a function with a given name
obj = findVar1(Rf_install(ident), R_GlobalEnv, FUNSXP, TRUE);
// If there is no function, anything else will do
if (obj == R_UnboundValue)
obj = findVar1(Rf_install(ident), R_GlobalEnv, ANYSXP, TRUE);
The resulting object is stored and later used to construct a SEXP
used in R_tryEval(...). Only here an application should (and now,
thanks to your advice, does) complain if there is something wrong.
I suppose, FUNSXP means functions (Rinternals says "Closure or Builtin"),
and ANYSXP means anything. Should inherits (last) parameter be used as TRUE?
Could you point me to some relevant documentation concerning R API? The
"standard" documentation is often not detailed enough.
All the best,
Matjaz.
--
dr. Matjaz Kukar
Univerza v Ljubljani
Fakulteta za racunalnistvo in informatiko
Trzaska 25, 1001 Ljubljana
More information about the R-devel
mailing list