在R中禁止自动输出到控制台

时间:2018-01-29 10:47:28

标签: r output

函数callmultmoments计算正态分布的时刻。 如果权力的sume是奇数,则该函数自动打印"Sum of powers is odd. Moment is 0."。有没有办法在原始功能不受影响的条件下压制它。

例如:

require(symmoments)
# Compute the moment for the 4-dimensional moment c(1,1,3,4):

m.1134 <- callmultmoments(c(1,1,3,4))

编辑:

正如here所述,我们可以使用

## Windows
sink("nul") 
...
sink()

## UNIX
sink("/dev/null")    # now suppresses
....                 # do stuff
sink()               # to undo prior suppression, back to normal now

但是,我正在编写一个包,所以我希望它与平台无关。任何想法改为做什么?

2 个答案:

答案 0 :(得分:5)

问题是由于该函数有多个print语句,其中stopwarningmessage是合适的,以便人们可以使用suppressWarningssuppressMessages

您可以使用invisible(capture.output())解决问题。

f1 <- function(n, ...){
    print("Random print statement")
    cat("Random cat statement\n")
    rnorm(n = n, ...)
}

f1(2)
#> [1] "Random print statement"
#> Random cat statement
#> [1] -0.1115004 -1.0830523
invisible(capture.output(x <- f1(2)))
x
#> [1]  0.0464493 -0.1453540

另见suppress messages displayed by "print" instead of "message" or "warning" in R

答案 1 :(得分:0)

只需简单地避免出现不均匀的时刻,就可以消除来自callmultmoments的此消息。在您的示例中,任何奇数中心矩(例如c(1,1,3,4))在数学上的期望值为0。也就是说,诸如E[X^1 Y^1 Z^3 W^4]之类的CENTRAL矩的期望值自动为0,其中幂之和(例如1 + 1 + 3 + 4)为奇数。