[R] How to stop function printing unwanted output?

David Winsemius dwinsemius at comcast.net
Thu Aug 6 18:39:46 CEST 2009

On Aug 6, 2009, at 12:24 PM, Erik Iverson wrote:

>>> In my example, I don't want LSD.test to print any output, I just  
>>> want
>>> to use some of it later... How to stop it printing anything?
>> ?invisible
> I'm not sure that works in this situation:
> test <- function() {
>  print("output")
> }
> test()
> invisible(test())
> Both of the above still print out "output", which I think is the  
> original problem. The invisible function will not print the value of  
> a function, but if there is an explicit "print" call within the  
> function, that will of course happen, since the value hasn't been  
> returned at that point.  However, we don't know the original problem  
> since LSD.test is not defined, and therefore the example is not  
> reproducible.  I assume within the function, it is printing out some  
> values using "print" or "cat"?  We just have to guess though.
> Maybe the answer is in ?sink ??

Quite right. A search suggests that LSD.test is from package agricolae  
and it does have several points at which cat() and print() would be  
subverting my intent. So the answer would be to sink it "somewhere  
that the sun does not shine" and then "unsink" or would that be  
With the example on the LSD.test help page:

 > sink(file="undesired.txt")
 > comparison <- invisible( LSD.test(yield,virus,df,MSerror,  
p.adj="bonferroni", group=FALSE,
+ main="Yield of sweetpotato\ndealt with different virus") )
 > sink()
 > comparison
   trt    means M N  std.err
1  cc 24.40000   3 2.084067
2  fc 12.86667   3 1.246774
3  ff 36.33333   3 4.233727
4  oo 36.90000   3 2.482606

> Erik

David Winsemius, MD
Heritage Laboratories
West Hartford, CT

More information about the R-help mailing list