禁用cat命令

csg*_*pie 14 r cat

假设我有以下功能:

## Just an example
f = function() { 
  for(i in 1:10000)
      cat(i)
  return(1)
}
Run Code Online (Sandbox Code Playgroud)

当我打电话f()有一种方法可以停止cat打印到屏幕上(无论如何都不改变功能)?

这个问题背后的原因

我的学生上传他们的R文件.然后我运行脚本并检查它们是否正确.每隔一段时间,学生就会离开cat指挥部.当它处于长时间的循环中时,这尤其令人恼火

jub*_*uba 19

在Linux上,你可以使用一个sink()调用/dev/null(或到另一个操作系统的临时文件,见?tempfile):

sink(file="/dev/null")
f()
sink()
Run Code Online (Sandbox Code Playgroud)

  • 或者在一行`capture.output(x < - f())` (5认同)
  • `sink`非常有用.但是它也会吸收函数的返回值. (2认同)

tim*_*tes 5

这应该工作?

oldcat = cat
cat = function( ..., file="", sep=" ", fill=F, labels=NULL, append=F ) {}
f()
cat = oldcat
Run Code Online (Sandbox Code Playgroud)

只需替换cat为空function,然后在完成时将其重新设置

  • `cat < - function(...){}`会更简单 (3认同)