首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >禁用cat命令

禁用cat命令
EN

Stack Overflow用户
提问于 2011-03-15 10:30:26
回答 5查看 4.5K关注 0票数 15

假设我有以下函数:

代码语言:javascript
复制
## Just an example
f = function() { 
  for(i in 1:10000)
      cat(i)
  return(1)
}

当我调用f()时,是否有办法阻止cat打印到屏幕上(无论如何,不改变函数)?

这个问题背后的原因

我的学生上传他们的R文件。然后运行脚本并检查它们是否正确。每隔一段时间,学生就会离开cat命令。当它在一个长的循环中时,这特别令人恼火

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-03-15 10:41:31

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

代码语言:javascript
复制
sink(file="/dev/null")
f()
sink()
票数 20
EN

Stack Overflow用户

发布于 2011-03-15 10:41:16

这个应该能行吗?

代码语言:javascript
复制
oldcat = cat
cat = function( ..., file="", sep=" ", fill=F, labels=NULL, append=F ) {}
f()
cat = oldcat

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

票数 5
EN

Stack Overflow用户

发布于 2011-03-15 11:18:23

下面是一个有趣的黑客,它将函数中的所有cat()注释掉。不过,不确定这是否会导致错误或函数中断:

代码语言:javascript
复制
foo <- deparse(f)
f <- eval(parse(text=gsub("cat","#cat",foo)))

f()

[1] 1

编辑:

另一个选项基本上是朱巴的答案,使用接收器,但您可以使用Defaults包来更改cat的默认行为。file参数基本上将其输出汇入一个文件中。因此:

代码语言:javascript
复制
library("Defaults")
setDefaults(cat,file="sink.txt")

f()

确保只输出cat,而不是print左右。但是,这大大减少了运行时,因为每次运行cat()时都会打开和关闭文件。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5310393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档