TL; DR:也不应warn.conflicts = FALSE
禁止依赖包的警告?
想象一下,当我们将一个包pkg1
与library
或require
相关联时会出现这种情况,这与{ package:base
或.GlobalEnv
。默认情况下,我们会看到警告:
library(zoo)
# has a warning about as.Date
可以被抑制:
detach("package:zoo", unload = T)
library(zoo, warn.conflicts = F)
# does not have a warning
现在,让我们拥有pkg2
,这取决于pkg1
并加载它。假设pkg2
也有冲突。很期待将pkg2
与warn.conflicts = F
联系在一起会抑制来自pkg1
和pkg2
的警告,但事实并非如此:
detach("package:zoo", unload = T)
as.xts <- function() {cat("dummy")}
library(xts)
# has warnings about both as.Date and as.xts
detach("package:xts", unload = T)
detach("package:zoo", unload = T)
library(xts, warn.conflicts = F)
# still has a warning about as.Date (?!)
问题是,为什么抑制行为不会被继承?如果背后有充分的理由,为什么在文档中没有明确说明?如果这是无意的,是否值得提出修复?
PS 我的用例如下:我正在从R脚本中捕获错误日志。除了冲突警告之外,我对所有警告和错误感兴趣,因为我确信这不会成为问题。对于上述情况,我有两种解决方案:
library(zoo, warn.conflicts = F)
,然后再呼叫library(xts, warn.conflicts = F)
。如果存在许多依赖项,则不方便。suppressPackageStartupMessages(library(xts, warn.conflicts = F))
。不确定我是否会丢失一些我可能感兴趣的重要信息,例如来自作者关于包更新等的消息来自sessionInfo()
的相关部分:
R version 3.1.1 (2014-07-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)
other attached packages:
[1] xts_0.9-7 zoo_1.7-11
PPS 我已检查library
的来源:warn.conflicts
仅使用一次,如果checkConflicts
则调用TRUE
,但我这样做看不到它被传递到其他任何地方。