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

时间:2010-04-27 16:30:44

标签: r

我想抑制一个命令的输出(在本例中为apply函数)。

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

How to suppress output

8 个答案:

答案 0 :(得分:81)

目前尚不清楚为什么要在没有sink的情况下执行此操作,但是您可以在invisible()函数中包装任何命令,它将抑制输出。例如:

1:10 # prints output
invisible(1:10) # hides it

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

{ sink("/dev/null"); ....; sink(); }

答案 1 :(得分:50)

使用capture.output()功能。它非常像一次性sink(),与invisible()不同,它可以抑制的不仅仅是打印消息。在UNIX上将文件参数设置为/dev/null或在Windows上将NUL设置为> invisible(cat("Hi\n")) Hi > capture.output( cat("Hi\n"), file='NUL') > 。例如,考虑到Dirk的注释:

{{1}}

答案 2 :(得分:10)

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

答案 3 :(得分:5)

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

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

test$betas

答案 4 :(得分:3)

如果有人到达这里寻求适用于RMarkdown的解决方案,这将禁止所有输出:

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

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


})})
```

代码将运行,但是输出将打印到HTML文档中

答案 5 :(得分:2)

以下功能应该完全符合您的要求:

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

例如,使用此处的函数:

foo=function(){
  print("BAR!")
  return(42)
}

运行

x = hush(foo())

将42分配给x但不会打印&#34; BAR!&#34;到STDOUT

请注意,在UNIX操作系统中,您需要替换&#34; NUL&#34;使用&#34; / dev / null&#34;

答案 6 :(得分:1)

让Hadley的评论成为答案(希望使其更清晰可见)。通过使用plyr软件包,可以不印刷而使用Apply系列

x <- 1:2
lapply(x, function(x) x + 1)
#> [[1]]
#> [1] 2
#> 
#> [[2]]
#> [1] 3

plyr::l_ply(x, function(x) x + 1)

reprex package(v0.3.0)于2020-05-19创建

答案 7 :(得分:0)

function dropDown(data, selectorId) {

    var selector = '<select  style="width: 400px;" id="results">';
    if (data == '') {
        selector += '<option value="0">No Reference</option>';
    } else {
        selector += '<option value="0">Choose a reference</option>';
        $.each(data, function (i, val) {
            selector += '<option value=' + val.journal_id + '>' + val.reference + '</option>';
        });
    }
    selector += '</select>';
    $(selector).appendTo(selectorId);
}

在行的末尾或下一行生成没有NULL的输出

invisible(cat("Dataset: ", dataset, fill = TRUE))
invisible(cat(" Width: " ,width, fill = TRUE))
invisible(cat(" Bin1:  " ,bin1interval, fill = TRUE))
invisible(cat(" Bin2:  " ,bin2interval, fill = TRUE))
invisible(cat(" Bin3:  " ,bin3interval, fill = TRUE))