Prof Brian Ripley wrote:

On Fri, 8 Oct 2004, Matjaz Kukar wrote:


Dear all,

when working on a project with embedded R, I found out that R-2.0.0 causes
a problem where older versions worked OK.

Rf_findVar(...) causes the following error when used to find a generic function
(such as print):

fun = Rf_findVar(...);
R_tryEval(fun, ...);


I think without knowing what you are putting in '...' this is impossible
to understand.  R_tryEval() does not seem to be part of the public API and

Where can one find out what is a public R API and what isn't?

I had to grep the sources to find it.  However, it seems to be intended to
evaluate an expression not a function, as in (tests/Embedding/tryEval.c)

    PROTECT(e = allocVector(LANGSXP, 2));
    SETCAR(e, Rf_install("sqrt"));
    SETCAR(CDR(e), NEW_CHARACTER(1));
    val = R_tryEval(e, NULL, &errorOccurred);

and it is possible that 2.0.0 is detecting an incorrect usage that 1.9.1
did not detect.


Silly me. I compressed my code a bit too much (hence the '...' you have noticed before). Actually, the expression gets constructed as above, with the only difference that it does not start with SETCAR(e, install("function_name")) but with SETCAR(e, obj) where obj = findVar(install("function_name"), R_GlobalEnv). This worked in previous versions (1.6.2 - 1.9.1) just fine. In 2.0.0 the problem, as described before, is that findVar returns a function object, but (in case of generic functions) the evaluation fails with the "Error in function (object, ...) : Invalid generic function in usemethod" error message.

I resorted to findFun function, however Peter Dalgaard here on the list suggested using
findVar1 (which seems to be an even more obscure function than R_tryEval). I even
had to write the header file by myself, although the function works just perfectly.


Incidentally, your code need not be littered with Rf_*; that indicates you are not including the right header files.

Well, both Rf_findVar function and findVar macro are declared and defined, respectively, in the same (Rinternals.h) file. So I'm pretty sure I'm including the right header file :-).

It seems to me more and more that my problems don't have much to do with
findVar ... functions, but are probably a result of deeper changes, maybe
in generic function handling.

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