From hj at jhu.edu  Sun Sep 21 01:55:45 2014
From: hj at jhu.edu (Harris A. Jaffee)
Date: Sat, 20 Sep 2014 19:55:45 -0400
Subject: [Rd] last user argument missing from Rscript --verbose
In-Reply-To: <CAPRP4-eeRiPs8wp2i3t8X1bLtroTJCL4CJSnWAhqJDVj+x5Hsw@mail.gmail.com>
References: <8A6E73FA-0C64-42DA-B506-01FDD7ED2204@jhu.edu>
	<21532.7626.215119.24473@stat.math.ethz.ch>
	<CAE3=dmesQDO3L-dJFKUTv8kjE5jK2Hq4Y9H5skdn6Gh81gtRug@mail.gmail.com>
	<18372662-053A-4D6D-B3AB-78EA467CC1F3@jhu.edu>
	<CAPRP4-eeRiPs8wp2i3t8X1bLtroTJCL4CJSnWAhqJDVj+x5Hsw@mail.gmail.com>
Message-ID: <253EB04F-B3EF-4A02-A619-233C08F5CF24@jhu.edu>

Terrific, and I appreciate your thoughts and encouragement.

So, getting back on-list, I propose a backward-incompatible change, with
or without --verbose, that the --args be included in the 'av' array, and
passed to R, only if there are user arguments to follow it.  The condition
for a first argument, at the time --args is currently included, is

	(i0+1) < argc

Scott's fix, already in the devel version, solves my original complaint and
should continue to do so, as long as av[ac] continues to be the terminating
NULL.  That is, av[ac-1] is the last argument in the R command.

On Sep 20, 2014, at 4:39 PM, Martin Maechler <maechler at stat.math.ethz.ch> wrote:

> 
> On Fri, Sep 19, 2014 at 5:26 PM, Harris A. Jaffee <hj at jhu.edu> wrote:
> I must have searched the archives badly!
> 
> I did not suggest that, exactly.  My hack was a little more complicated,
> trying to honor what seemed to be the general intent of the code.  So, I
> only conditionally echo the argument at i=ac-1 (see attached). 
> 
> ?Thank you, I understand but think it's unnecessarily complicated.
> Rather I think that the following issue should ideally be handled:
> 
> There is? ?also a more basic issue to decide, whether the "--args" should be sent to
> R when nothing follows it, but that debate should occur on-list, if at all.
> 
> ?and if that is fixed (not sending '--args' if at the end), the simple fix for verbose printing will be enough.
> 
> ?Yes, please go back on saying this on R-devel ... You did take it offline (and some say that it is not allowed to put something private suddenly back online, so I did not ...  but do not care if you do it here).?
> 
> 
> Martin
> ? 
> 
>  
> 
> On Sep 19, 2014, at 9:14 AM, Scott Kostyshak <skostysh at princeton.edu> wrote:
> 
> > On Fri, Sep 19, 2014 at 8:12 AM, Martin Maechler
> 
> > <maechler at stat.math.ethz.ch> wrote:
> >>>>>>> Harris A Jaffee <hj at jhu.edu>
> >>>>>>>    on Thu, 18 Sep 2014 19:32:29 +0200 writes:
> >> 
> >> (using  HTML, please don't )
> >> 
> >>> The loop that echoes the arguments almost always stops too soon.  It
> >>> apparently does that to avoid
> >>> echoing the "--args" (that had been inserted) when there are no user
> >>> arguments.  However, when there
> >>> are user arguments, the next element of the 'av' array is the last
> >>> argument and usually not "--args",
> >>> although it can be.
> >>> ?Rscript is a little sketchy:
> >>>     `--verbose' gives details of what `Rscript' is doing.  Also passed
> >>>          on to R.
> >>> What is passed to R is correct, but the diagnostic is not:
> >>> $ Rscript --verbose /dev/null 1 2
> >>>  running
> >>>  '/path_to_R --slave --no-restore --file=/dev/null --args 1'
> >>> Fixed (only tested on Mac):
> >>> $ Rscript --verbose /dev/null 1 2
> >>>  running
> >>>  '/Library/Frameworks/R.framework/Versions/3.1/Resources/bin/R --slave
> >>> --no-restore --file=/dev/null --args 1 2'
> >> 
> >> You are right about the problem, also reproducible on Linux.
> >> You mention a 'fix'.
> >> It looks to me that is just
> >> 
> >> -       for(i = 1; i < ac-1; i++) fprintf(stderr, " %s", av[i]);
> >> +       for(i = 1; i < ac; i++) fprintf(stderr, " %s", av[i]);
> >> 
> >> in unix/Rscript.c, right ?
> > 
> > Yes, I suggested the same patch here:
> > http://r.789695.n4.nabble.com/patch-Rscript-off-by-one-error-in-output-td4693780.html
> > 
> > Scott
> > 
> >> BTW: If one use  -e 'commandArgs()'  instead of   /dev/null one
> >> sees that Rscript's "lying" about the last argument is not
> >> helpful anyway :
> >> 
> >>  Rscript --verbose -e 'commandArgs()'
> >> 
> >>  running
> >>    '/usr/local64.sfs/app/R/R-3.1.1-inst/bin/R --slave --no-restore -e commandArgs()'
> >> 
> >>  [1] "/usr/local64.sfs/app/R/R-3.1.1-inst/bin/exec/R"
> >>  [2] "--slave"
> >>  [3] "--no-restore"
> >>  [4] "-e"
> >>  [5] "commandArgs()"
> >>  [6] "--args"
> >> 
> >> because the '--args' appears anyway and indeed *is* passed to 'R'...
> >> 
> >> A better fix would rather suppress that; but I will commit the
> >> above change.
> > 
> > 
> > --
> > Scott Kostyshak
> > Economics PhD Candidate
> > Princeton University
> > 
> > ______________________________________________
> > R-devel at r-project.org mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-devel
> 
> 



[Rd] last user argument missing from Rscript --verbose
Harris A. Jaffee