假设我有以下函数:
## Just an example
f = function() {
for(i in 1:10000)
cat(i)
return(1)
}当我调用f()时,是否有办法阻止cat打印到屏幕上(无论如何,不改变函数)?
这个问题背后的原因
我的学生上传他们的R文件。然后运行脚本并检查它们是否正确。每隔一段时间,学生就会离开cat命令。当它在一个长的循环中时,这特别令人恼火
发布于 2011-03-15 10:41:31
在Linux上,您可以使用sink()调用/dev/null(或对另一个操作系统上的临时文件,请参见?tempfile):
sink(file="/dev/null")
f()
sink()发布于 2011-03-15 10:41:16
这个应该能行吗?
oldcat = cat
cat = function( ..., file="", sep=" ", fill=F, labels=NULL, append=F ) {}
f()
cat = oldcat只需将cat替换为空的function,然后在完成后将其设置为
发布于 2011-03-15 11:18:23
下面是一个有趣的黑客,它将函数中的所有cat()注释掉。不过,不确定这是否会导致错误或函数中断:
foo <- deparse(f)
f <- eval(parse(text=gsub("cat","#cat",foo)))
f()
[1] 1编辑:
另一个选项基本上是朱巴的答案,使用接收器,但您可以使用Defaults包来更改cat的默认行为。file参数基本上将其输出汇入一个文件中。因此:
library("Defaults")
setDefaults(cat,file="sink.txt")
f()确保只输出cat,而不是print左右。但是,这大大减少了运行时,因为每次运行cat()时都会打开和关闭文件。
https://stackoverflow.com/questions/5310393
复制相似问题