[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