From ggrothendieck at gmail.com  Fri Apr 27 17:38:34 2007
From: ggrothendieck at gmail.com (Gabor Grothendieck)
Date: Fri, 27 Apr 2007 11:38:34 -0400
Subject: [Rd] system() in packages
In-Reply-To: <463211E5.6030208@acm.org>
References: <3E7A71D7-49A5-4C2E-A365-9D2387D76D3B@soc.soton.ac.uk>
	<Pine.LNX.4.64.0704271517120.29708@gannet.stats.ox.ac.uk>
	<463211E5.6030208@acm.org>
Message-ID: <971536df0704270838j4cf3abb3p768ec6b26beff76b@mail.gmail.com>

One can use the R shell on Windows:

   shell("echo foo.bar | findstr foo")

or an explicit call to the Windows cmd console:

  system("cmd /c echo foo.bar | findstr foo")


On 4/27/07, Tony Plate <tplate at acm.org> wrote:
> With cygwin bash installed under Windows, one can use pipes in system(),
> e.g., like this:
>
> R 2.5.0 under Windows XP:
>  > system("echo foo | sed s/foo/bar/") # this doesn't work under windows
> foo | sed s/foo/bar/
>  > # but using 'bash -c' does:
>  > system("bash -c \"echo foo | sed s/foo/bar/\"")
> bar
>  > # and some use of quotes within the command actually works!
>  > system("bash -c \"echo foo | sed 's/foo/bar rrr/'\"")
> bar rrr
>  >
>
> [Beware: complex quoting inside the -c command can be difficult to get
> right.]
>
> -- Tony Plate
>
>
> Prof Brian Ripley wrote:
> > The first comment is that will only work on Unix-alikes, since '|' needs a
> > shell.
> >
> > So, if this is on a Unix-alike you need to establish if the program is in
> > the path at run time and cache the result.  I have no idea if this would
> > actually work, but for example system('gp --version') might provide a
> > suitable test.
> >
> > On Fri, 27 Apr 2007, Robin Hankin wrote:
> >
> >> Hello
> >>
> >> Quite often I need higher precision, or larger numbers,
> >>  than IEEE double precision allows.  One strategy I sometimes
> >> use is to use system() to call pari/gp, which is not constrained by
> >> IEEE.
> >>
> >> [pari/gp is a GPL high-level mathematical programming language
> >> geared towards pure mathematics]
> >>
> >> Two of my packages contain lines like the following:
> >>
> >>> system(" echo '1.12^66' | gp -q f",intern=TRUE)
> >> [1]
> >> "1771.697189476241729649767636564084681203806302318041262248838950177194
> >> 116346432205160921568393661760"
> >>
> >> Note the high precision of the answer.
> >>
> >> My question is, how to deal with the possibility that pari/gp is not
> >> installed?
> >>
> >> If the system cannot find gp for some reason, I get:
> >>
> >>> system(" echo '1.12^66' | gp -q f",intern=TRUE)
> >> sh: line 1: gp: command not found
> >> character(0)
> >> What's the recommended way to handle this eventuality gracefully?  The
> >> functions that do use pari/gp have "pure" R equivalents (but much
> >> slower and less accurate)  so I want users to be able to install the
> >> package without pari/gp.
> >>
> >>
> >> --
> >> Robin Hankin
> >> Uncertainty Analyst
> >> National Oceanography Centre, Southampton
> >> European Way, Southampton SO14 3ZH, UK
> >>  tel  023-8059-7743
> >>
> >> ______________________________________________
> >> R-devel at r-project.org mailing list
> >> https://stat.ethz.ch/mailman/listinfo/r-devel
> >>
> >
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>



[Rd] system() in packages
Gabor Grothendieck