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



函数callmultmoments计算正态分布的矩。该函数会自动打印"Sum of powers is odd. Moment is 0."如果幂的 sume 是奇数。在原始功能保持不变的情况下,有没有办法抑制它。

前任:

require(symmoments)
# Compute the moment for the 4-dimensional moment c(1,1,3,4):
m.1134 <- callmultmoments(c(1,1,3,4))

编辑:

如此处所述,我们可以使用

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

但是,我正在编写一个包,所以我希望它是独立于平台的。有什么想法吗?

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

你可以在整个作业(不仅仅是右侧(周围使用invisible(capture.output())来工作。

f1 <- function(n, ...){
    print("Random print statement")
    cat("Random cat statementn")
    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

另请参阅禁止显示 R 中的"打印"而不是"消息"或"警告"的消息。

如果您正在使用的函数Barnard::barnard.test以下工作:

invisible(capture.output(abc <- barnard.test(8,14,1,3)))

但是,如果您只使用invisible或仅使用capture.output功能,则仍然具有不需要的打印。

警告:如果您按照我建议的方式进行操作,以后不要打印abc。 你会得到很多你不想要的东西。 相反,只需抓住您真正想要的部分,例如 abc$p.value .

可以通过简单地避免一个不均匀的时刻来抑制来自callmultmoments的消息。任何奇数中心矩(例如示例中的c(1,1,3,4)(在数学上的期望值为 0。也就是说,CENTRAL 矩(例如 E[X^1 Y^1 Z^3 W^4](的期望值,其中幂的总和(例如 1+1+3+4(为奇数,自动为 0。

最新更新