Suppose I have the following function:
## Just an example
f = function() {
for(i in 1:10000)
cat(i)
return(1)
}
When I call f()
is there a way to stop cat
printing to the screen (without altering the function in anyway)?
Reason behind this question
My students upload their R files. I then run the scripts and check to see if they are correct. Every so often, a student leaves in the cat
command. This is especially irritating when it's in a long for loop
This should work?
Just replace
cat
with an emptyfunction
, and then set it back on completionOn Linux, you can use a
sink()
call to/dev/null
(or to a temporary file on another OS, see?tempfile
) :capture.output()
withinvisible()
does what you want:This also works:
Here is a funny hack that comments out all the
cat()
's in a function. Not sure if this gives errors or breaks the function though:Edit:
Another option is basically Juba's answer, using sink, but you can use the
Defaults
package to change the default behavior ofcat
. Thefile
argument basically sinks its output in a file. So :Ensures that only output of
cat
and notprint
or so is sinked. However, this drastically reduces the runtime since now a file is opened and closed everytimecat()
is run.