抑制加载时的冲突行为不会影响依赖包

时间:2014-10-01 08:49:27

标签: r warnings packages

TL; DR:也不应warn.conflicts = FALSE禁止依赖包的警告?

想象一下,当我们将一个包pkg1libraryrequire相关联时会出现这种情况,这与{ 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也有冲突。很期待将pkg2warn.conflicts = F联系在一起会抑制来自pkg1pkg2的警告,但事实并非如此:

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脚本中捕获错误日志。除了冲突警告之外,我对所有警告和错误感兴趣,因为我确信这不会成为问题。对于上述情况,我有两种解决方案:

  1. 先呼叫library(zoo, warn.conflicts = F),然后再呼叫library(xts, warn.conflicts = F)。如果存在许多依赖项,则不方便。
  2. 使用suppressPackageStartupMessages(library(xts, warn.conflicts = F))。不确定我是否会丢失一些我可能感兴趣的重要信息,例如来自作者关于包更新等的消息
  3. 来自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,但我这样做看不到它被传递到其他任何地方。

0 个答案:

没有答案