[R] writing R shell scripts?

Henrik Bengtsson hb at maths.lth.se
Wed Nov 9 04:56:25 CET 2005


Mike Miller wrote:

>Many thanks for the suggestions.  Here is a related question:
>
>When I do things like this...
>
>echo "matrix(rnorm(25*2),c(25,2))" | R --slave --no-save
>
>...I get the desired result except that I would like to suppress the 
>"[,1]" row and column labels so that only the values go to stdout.  What 
>is the trick to making that work?
>  
>
What you ask R to do is

matrix(rnorm(25*2),c(25,2))

which is equivalent to

print(matrix(rnorm(25*2),c(25,2)))

What you really want to do might be solved by write.table(), e.g.

x <- matrix(rnorm(25*2),c(25,2));
write.table(file=stdout(), x, row.names=FALSE, col.names=FALSE);

A note of concern: When writing batch scripts like this, be explicit and use the print() statement.  A counter example to compare

echo "1; 2" | R --slave --no-save

and

echo "print(1); print(2)" | R --slave --no-save



>By the way, I find it useful to have a script in my path that does this:
>
>#!/bin/sh
>echo "$1" | /usr/local/bin/R --slave --no-save
>
>Suppose that script was called "doR", then one could do things like this 
>from the Linux/UNIX command line:
>
># doR 'sqrt(35.6)'
>[1] 5.966574
>
># doR 'runif(1)'
>[1] 0.8881654
>
>Which I find to be handy for quick arithmetic and even for much more 
>sophisticated things.  I'd like to get rid of the "[1]" though!
>
>  
>
If you want to be lazy and not use, say, doR 'cat(runif(1),"\n")' above, 
maybe a simple Unix sed in your shell script can fix that?!

/Henrik

>Mike
>
>  
>




More information about the R-help mailing list