Skip to content

send command to other program

6 messages · thoeb, Ranjan Maitra, Jim Lemon +2 more

#
Hello,
does anybody know about how to "send" a command or a text line from R to
another program? I have written a script in which several calculations are
made and outputfiles (csv) are generated. Afterwards I open another program
(Fortran) via shell.exec. This program asks for the names if the output
files and it would be quite practically if it could just adopt the file
names from the r script.

Thank you in advance! 

-----
Tamara Hoebinger
University of Vienna
#
Does ?system help?

Ranjan

On Tue, 28 Apr 2009 13:00:28 -0700 (PDT) thoeb <t.hoebinger at gmail.com>
wrote:
#
Thanks! I have not used "system" before. May it works if "command" ist the
call for the program, but how can I integrate the transfer of the file names
(strings) from R to the program?
Ranjan Maitra wrote:
-----
Tamara Hoebinger
University of Vienna
#
thoeb wrote:
Hi Tamara,
If the succeeding program can read the name of the input file via the 
command line arguments, like:

myfortranprogram -i myfile.csv

you can include the arguments in the shell call. Alternatively, you 
could have R write a shell script that would execute the program with 
the appropriate arguments, then call the shell script from R. Of course 
if your program has to have keyboard input for the filename, you would 
have to resort to magic like writing the filename into the keystroke buffer.

Jim
#
Hi,
Consider also that you may easily modify system names from inside your R
script as:

system("mv oldname newname")

Best Regards,
Javier
...
#
Jim Lemon wrote:
if your r code produces just the file names, each on a separate line,
and the other program takes file names from the args list with no
particular option needed to specify them, you might try:

    r <your r script> | xargs <your program>
    <your program> $(r <your r script>)

as in

    # dummy files and scripts
    echo "foo" > foo
    echo "bar" > bar
    echo "cat(paste(c('foo', 'bar'), '\n', collapse=''))" > script.r
    echo 'for f in "$@"; do echo "input: $f"; done' > program
    chmod 755 program

    r script.r | xargs ./program
    ./program $(r script.r)
  
you may need to adapt the pattern to a shell other than bash.

vQ