Hi,


What about using cat()?
Here is a piece of code that allows to bypass standard output to produce such a result.
Be carefull: it is dangerous: it replaces output by calling 'cat()', which is not allowed on all objects...


-----
EatOutput <- function(start=TRUE,stop=!start){
        if (start)
        {

                ToCat <- function()
                {
                        function(expr,value,ok,visible){
                        if (visible) {
                                sink()
                                cat(value,file="")
                                cat("\n",file="")
                                on.exit(sink("tmp"),add=TRUE)
                        }
                        invisible(return(TRUE))
                        }
                }

                on.exit(sink("tmp"),add=TRUE)   # To create the first sink
                on.exit(.out<<-addTaskCallback(ToCat()),add=TRUE)
        }
        else
        {
                test <- try(removeTaskCallback(.out))
                if(!inherits(test,"try-error")) sink()

        }
}

-----

Now suppose this piece of code is put in file "eat.r", ending with a call to the function EatOutput()

Then:

> echo "source('eat.r');sum(1:10)" | R --slave
55

If you explain more clearly your needs, maybe we we could propose something more accurate.

Eric


> echo "cat(sum(c(1,2,3)));cat("\n");cat(3*2)" | R --slave 66

At 13:49 24/02/2004, Dirk Eddelbuettel wrote:
On Tue, Feb 24, 2004 at 10:07:32AM +0100, Martin Maechler wrote:
> >>>>> "Jan" == Jan de Leeuw <[EMAIL PROTECTED]>
> >>>>>     on Tue, 24 Feb 2004 00:52:51 -0800 writes:
>
>     Jan> if R had something like
>     >> python -c "print(sum([1,2,3]));print(3*2)"
>     Jan> 6 6
>
>     Jan> but I guess the only way to do this is by writing the
>     Jan> string to a tmp file and then doing something like "R
>     Jan> CMD BATCH --quiet" on the tmp file
>
> Well, a bit better (with a shell prompt "%") is
>
>     % echo "print(sum(c(1,2,3)));print(3*2)" | R --quiet --vanilla
>
>     > print(sum(c(1,2,3)));print(3*2)
>     [1] 6
>     [1] 6
>     >
>
> or (slightly nicer)
>
>     % echo "sum(c(1,2,3)); 3*2" | R --quiet --vanilla
>     > sum(c(1,2,3)); 3*2
>     [1] 6
>     [1] 6
>     >
>
> but it still echoes the input by default

Not with --slave:

[EMAIL PROTECTED]:~> echo "sum(c(1,2,3)); 3*2" | R --slave
[1] 6
[1] 6

I would be pretty trivial to filter the "^[1] " out.

Dirk

--
The relationship between the computed price and reality is as yet unknown.
                                             -- From the pac(8) manual page

______________________________________________
[EMAIL PROTECTED] mailing list
https://www.stat.math.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html

Eric Lecoutre UCL / Institut de Statistique Voie du Roman Pays, 20 1348 Louvain-la-Neuve Belgium

tel: (+32)(0)10473050
[EMAIL PROTECTED]
http://www.stat.ucl.ac.be/ISpersonnel/lecoutre

If the statistics are boring, then you've got the wrong numbers. -Edward Tufte

______________________________________________
[EMAIL PROTECTED] mailing list
https://www.stat.math.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html

Reply via email to