Alex Rivera | Logout

Disabling the cat command

Asked 2011-03-15T10:30:26.693
15

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

r cat
Edit
Report

1 Answer

2

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:

foo <- deparse(f)
f <- eval(parse(text=gsub("cat","#cat",foo)))

f()

[1] 1

Edit:

Another option is basically Juba's answer, using sink, but you can use the Defaults package to change the default behavior of cat. The file argument basically sinks its output in a file. So :

library("Defaults")
setDefaults(cat,file="sink.txt")

f()

Ensures that only output of cat and not print or so is sinked. However, this drastically reduces the runtime since now a file is opened and closed everytime cat() is run.

answered 2011-03-15T11:18:23.380

Your Answer