【发布时间】:2021-02-10 14:00:48
【问题描述】:
我知道该函数有一个 quiet 参数,但我试图在 quiet = FALSE 时隐藏该消息。
这可能很奇怪,但我在测试我正在编写的包时遇到了这个问题。我在设置quiet = FALSE 时使用testthat::expect_message(),但该功能实际上并没有抑制消息(它应该,实际上它通常与“正常”消息一起使用)。
我用suppressMessages() 尝试过,但没有按预期工作:
url <- "https://github.com/ipeaGIT/gtfstools/raw/master/inst/extdata/spo_gtfs.zip"
download.file(url, destfile = tempfile(), quiet = FALSE)
#> trying URL 'https://github.com/ipeaGIT/gtfstools/raw/master/inst/extdata/spo_gtfs.zip'
#> Content type 'application/zip' length 191108 bytes (186 KB)
#> downloaded 186 KB
suppressMessages(download.file(url, destfile = tempfile(), quiet = FALSE))
#> trying URL 'https://github.com/ipeaGIT/gtfstools/raw/master/inst/extdata/spo_gtfs.zip'
#> Content type 'application/zip' length 191108 bytes (186 KB)
#> downloaded 186 KB
关于如何抑制它的任何想法,最好不更改任何options?这不是危及生命的情况,但它让我很好奇。
【问题讨论】:
-
我是否正确理解您不想使用
quiet=TRUE选项,因为您“需要”测试消息? -
这个问题的更清晰的措辞可能是“如何使
testthat::expect_message()抑制download.file()命令生成的消息(就像通常那样)?” -
问题是这些消息是从
curl生成的,而不是从R 生成的。quiet = TRUE选项将curl命令修改为要求curl保持安静。所以你需要一种拦截命令行输出的方法。capture.output可能有用,但我现在没时间试验…… -
@GregorThomas
utils::capture.output不起作用,可能是由于您所说的原因。不过,在测试中模拟函数可能是一种选择...... -
dario 和 GregorThomas,感谢您参与其中。为了清楚起见,Gregor 确实比我更好地提出了这个问题,谢谢!下面乔的回复为此提供了一个很好的解决方法。