Roland Boubela
2008-Mar-19 16:22 UTC
[Rd] R_ParseVector problem: it's cutting off after the decimal point
Dear all, my aim is to integrate R in an interactive visualisation software called Bulk Analyzer developed by VrVis (http://www.vrvis.at). the code: SEXP e, tmp; ParseStatus status; PROTECT(tmp = mkString("x <- c(1.234,-3.45)")); PrintValue(tmp); PROTECT(e = R_ParseVector(tmp, -1, &status, R_NilValue)); PrintValue(e); UNPROTECT(2); produces the following output: [1] "x <- c(1.234,-3.45)" expression(x <- c(1, -3)) I'm using MS Visual C++. The code works fine in a small test project with the same R startup settings (attached) as in the Bulk Analyzer project. Is there any setting or condition for this parser behaviour? Kind regards, Roland N. Boubela> sessionInfo()R version 2.6.2 (2008-02-08) i386-pc-mingw32 locale: German_Austria.1252 attached base packages: [1] stats graphics grDevices utils datasets methods base =============================================== // init R Rf_initEmbeddedR(0, NULL); Rstart Rp = &rp; R_DefParams(Rp); // root of the R installation Rp->rhome = get_R_HOME(); // root of the users directory Rp->home = getRUser(); // UImode: RGui, RTerm, LinkDLL Rp->CharacterMode = LinkDLL; // function which reads input for R from a console Rp->ReadConsole = myReadConsole; // function which writes output from R to a console Rp->WriteConsole = NULL; Rp->WriteConsoleEx = myWriteConsoleEx; // called during i/o, eval, graphics in ProcessEvents Rp->CallBack = myCallBack; // handles messages for the user from R Rp->ShowMessage = myShowconcise Message; // user interaction: a user is asked a question an should answer with YesNoCancel (maybe dialog) Rp->YesNoCancel = myYesNoCancel; // on R state changed: busy(=1)/idle(=0) Rp->Busy = myBusy; Rp->home = getRUser(); // R-Settings... Rp->R_Quiet = (Rboolean)FALSE; Rp->R_Interactive = (Rboolean)TRUE; Rp->RestoreAction = SA_RESTORE; Rp->SaveAction = SA_NOSAVE; // our parameters R_SetParams(Rp); R_set_command_line_arguments(0, NULL); GA_initapp(0, NULL); readconsolecfg(); /// run_Rmainloop() starting in a different thread
Prof Brian Ripley
2008-Mar-20 21:37 UTC
[Rd] R_ParseVector problem: it's cutting off after the decimal point
There are so many things that might be going on here that I at least can't do more than guess pretty blindly. First, you are assuming that this is a parser issue, but that's not proved by your test -- it might be a printing issue, which potentially involves deparsing. So I would have at least evaluated the expression and printed the result (via printf, not PrintValue). I noticed that you did not check the parse status so we don't know if this parsed completely. This could well be a locale issue: we don't have a complete program and you are in a non-English locale. The setting of the locale category LC_NUMERIC does affect this, and I would not expect embedded R to work unless that was 'C'. Here's a test that points to the locale issue:> Sys.setlocale("LC_NUMERIC", "german")[1] "German_Germany.1252" Warning message: In Sys.setlocale("LC_NUMERIC", "german") : setting 'LC_NUMERIC' may cause R to function strangely> foo <- parse(text="x <- c(1.234,-3.45)") > attributes(foo) <- NULL > fooexpression(x <- c(1, -3)) So my guess it is an error in the environment you are using for embedded R. On Wed, 19 Mar 2008, Roland Boubela wrote:> Dear all, > > my aim is to integrate R in an interactive visualisation software > called Bulk Analyzer developed by VrVis (http://www.vrvis.at). > > the code: > > SEXP e, tmp; > ParseStatus status; > > PROTECT(tmp = mkString("x <- c(1.234,-3.45)")); > PrintValue(tmp); > PROTECT(e = R_ParseVector(tmp, -1, &status, R_NilValue)); > PrintValue(e); > UNPROTECT(2); > > produces the following output: > > [1] "x <- c(1.234,-3.45)" > > expression(x <- c(1, -3)) > > > I'm using MS Visual C++. The code works fine in a small test project > with the same R startup settings (attached) as in the Bulk Analyzer > project. > Is there any setting or condition for this parser behaviour? > > Kind regards, > Roland N. Boubela > > >> sessionInfo() > R version 2.6.2 (2008-02-08) > i386-pc-mingw32 > > locale: > German_Austria.1252 > > attached base packages: > [1] stats graphics grDevices utils datasets methods base > ===============================================> // init R > Rf_initEmbeddedR(0, NULL); > > Rstart Rp = &rp; > R_DefParams(Rp); > > // root of the R installation > Rp->rhome = get_R_HOME(); > > // root of the users directory > Rp->home = getRUser(); > > // UImode: RGui, RTerm, LinkDLL > Rp->CharacterMode = LinkDLL; > > // function which reads input for R from a console > Rp->ReadConsole = myReadConsole; > > // function which writes output from R to a console > Rp->WriteConsole = NULL; > Rp->WriteConsoleEx = myWriteConsoleEx; > > // called during i/o, eval, graphics in ProcessEvents > Rp->CallBack = myCallBack; > > // handles messages for the user from R > Rp->ShowMessage = myShowconcise Message; > > // user interaction: a user is asked a question an should answer > with YesNoCancel (maybe dialog) > Rp->YesNoCancel = myYesNoCancel; > > // on R state changed: busy(=1)/idle(=0) > Rp->Busy = myBusy; > > Rp->home = getRUser(); > > // R-Settings... > Rp->R_Quiet = (Rboolean)FALSE; > Rp->R_Interactive = (Rboolean)TRUE; > Rp->RestoreAction = SA_RESTORE; > Rp->SaveAction = SA_NOSAVE; > > // our parameters > R_SetParams(Rp); > R_set_command_line_arguments(0, NULL); > > GA_initapp(0, NULL); > readconsolecfg(); > > /// run_Rmainloop() starting in a different thread > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel >-- Brian D. Ripley, ripley at stats.ox.ac.uk Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595