[Rd] how to determine if a function's result is invisible
Martin Morgan
mtmorgan at fhcrc.org
Sun Oct 29 15:56:59 CET 2006
>> Yes, I know! That is why this code is NOT released to CRAN, and also why
>> I do NOT propose it as to John Fox or Jose-Claudio Faria as a patch for
>> R Commander or Tinn-R, respectively. We are precisely discussing the
>> problem to find better solutions (the R GUI API?). For instance, could
>> you suggest a better isLineComplete() function? I am pretty sure one
>> could get something better using C code, which is something I have not
>> attempted to do.
>
> I don't know a better isLineComplete function currently, but if parse()
> returned more structured error information, it would be easy to write
> one. (Of course, we might not need one in that case...)
>
> I think that's a better approach, and it's definitely something that I
> am interested in working on. It seems to me to be a waste of my time to
> make internal changes that will not only allow, but *force* all GUI
> writers to replicate the R console. It should be easy to do that (and
> it's not now), but it should also be easy to do something quite different.
Prof. Ripley improved the mechanism for handling this at the C level
during the last release cycle. The basic strategy is
#include <R_ext/Parse.h>
SEXP parses(SEXP cmd, SEXP rho) {
ParseStatus status;
SEXP res = R_ParseVector(cmd, -1, &status);
switch(status) {
case PARSE_NULL:
case PARSE_OK:
break;
case PARSE_INCOMPLETE:
...
break;
case PARSE_ERROR:
...
break;
case PARSE_EOF:
... /* not sure we ever reach here -- incomplete before eof */
break;
}
return res;
}
my implementation of '...' is to signalCondition, so at the R level
you can detect the outcome in a tryCatch, something like
expr <- readLines(file, 1)
expr <- tryCatch(.Call("parses", expr, environment()),
parse_incomplete = ...)
Martin
--
Bioconductor / Computational Biology
http://bioconductor.org
More information about the R-devel
mailing list