禁用cat命令
假设我有以下函数:
## Just an example
f = function() {
for(i in 1:10000)
cat(i)
return(1)
}
当我调用 f()
时,有没有办法停止 cat
打印到屏幕(无论如何都不改变函数)?
此问题背后的原因
我的学生上传他们的 R 文件。然后我运行脚本并检查它们是否正确。每隔一段时间,就会有学生发出 cat
命令。当它处于长 for 循环中时,这尤其令人恼火
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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
在 Linux 上,您可以使用
sink()
调用/dev/null
(或另一个操作系统上的临时文件,请参阅?tempfile
):On Linux, you can use a
sink()
call to/dev/null
(or to a temporary file on another OS, see?tempfile
) :这应该有效吗?
只需将
cat
替换为空的function
,然后在完成时将其设置回来This should work?
Just replace
cat
with an emptyfunction
, and then set it back on completioncapture.output()
和invisible()
可以完成您想要的操作:这也有效:
capture.output()
withinvisible()
does what you want:This also works:
这是一个有趣的技巧,它注释掉函数中的所有
cat()
。不确定这是否会产生错误或破坏功能:编辑:
另一个选项基本上是 Juba 的答案,使用接收器,但您可以使用
Defaults
包来更改cat
的默认行为代码>.file
参数基本上将其输出放入文件中。所以:确保只有
cat
的输出而不是print
等的输出被下沉。然而,这大大减少了运行时间,因为现在每次运行cat()
时都会打开和关闭一个文件。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.purrr
库中的函数quietly()
创建函数的安静版本:The function
quietly()
from thepurrr
library creates a quiet version of a function: