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

______________________________________________
[EMAIL PROTECTED] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to