在R中抑制一个命令的输出

Tor*_*Tor 79 r

我想抑制一个命令的输出(在这种情况下,apply函数).

是否可以不使用sink()?我已经在下面找到了所描述的解决方案,但是如果可能的话,我想在一行中做到这一点.

如何抑制输出

Sha*_*ane 84

目前尚不清楚你为什么要这样做sink,但你可以在invisible()函数中包装任何命令,它会抑制输出.例如:

1:10 # prints output
invisible(1:10) # hides it
Run Code Online (Sandbox Code Playgroud)

否则,您始终可以使用分号和括号将事物组合成一行:

{ sink("/dev/null"); ....; sink(); }
Run Code Online (Sandbox Code Playgroud)

  • 试试'invisible(cat("Hi \n"))' - `invisible()`只会抑制表达式的打印,它不是一个`sink()`one-liner. (4认同)
  • 不适用于 Windows 下的 `idw` 功能。我认为最好的解决方案是使用 `sink` (3认同)
  • 是的,但我认为它符合提问者的需要,除非我在问题中遗漏了一些东西...... (2认同)

Sha*_*pie 52

使用该capture.output()功能.它的工作方式非常像一次性sink()而且不同invisible(),它可以抑制的不仅仅是打印消息./dev/null在UNIX或NULWindows 上将file参数设置为.例如,考虑到Dirk的说明:

> invisible(cat("Hi\n"))
Hi

> capture.output( cat("Hi\n"), file='NUL')
> 
Run Code Online (Sandbox Code Playgroud)

  • 如果要将此应用于返回某个值并且您想要使用此值的函数,则不起作用 (9认同)
  • @TMS过去几个月发生了什么变化?我只是测试使用函数返回的值,它工作...`capture.output(x < - log(2))`然后`x`的值为`log(2)`... (6认同)
  • 在代码中使用 nullfile() 可能比特定于平台的 nullfile()/NUL 更干净? (3认同)

Dan*_*nny 14

以下函数应该完全符合您的要求:

hush=function(code){
  sink("NUL") # use /dev/null in UNIX
  tmp = code
  sink()
  return(tmp)
}
Run Code Online (Sandbox Code Playgroud)

例如这里的函数:

foo=function(){
  print("BAR!")
  return(42)
}
Run Code Online (Sandbox Code Playgroud)

跑步

x = hush(foo())
Run Code Online (Sandbox Code Playgroud)

将 42 分配给 x 但不会打印“BAR!” 到标准输出

请注意,在 UNIX 操作系统中,您需要将“NUL”替换为“/dev/null”

  • 这是唯一满足我需要的答案,被低估了。 (4认同)
  • 正是我所需要的 (4认同)
  • @Danny我发现了这个问题,输出是messages(),这种方法不适用于这种输出。我不得不使用`suppressMessages()` (3认同)

Ani*_*iko 9

R只会自动打印未分配表达式的输出,因此只需将结果apply赋给变量,它就不会打印出来.

  • 某些函数中有“ print()”或“ cat(cat)”,它们会进入屏幕,而不是分配给屏幕。 (2认同)

小智 7

您可以像下面一样使用'capture.output'.这允许您稍后使用数据:

log <- capture.output({
  test <- CensReg.SMN(cc=cc,x=x,y=y, nu=NULL, type="Normal")
})

test$betas
Run Code Online (Sandbox Code Playgroud)


use*_*745 7

如果有人来到这里寻找适用于 RMarkdown 的解决方案,这将抑制所有输出:

```{r error=FALSE, warning=FALSE, message=FALSE}
invisible({capture.output({

# Your code goes here
2 * 2
# etc
# etc


})})
```
Run Code Online (Sandbox Code Playgroud)

代码将运行,但输出不会打印到 HTML 文档