【问题标题】:R dplyr filter not masking base filter? [duplicate]R dplyr 过滤器不屏蔽基本过滤器? [复制]
【发布时间】:2023-03-12 04:07:01
【问题描述】:

在工作中,我有一台运行 R 3.1.2 的 Windows 7 计算机。

我有一个名为 packages.R 的文件。在我的这个文件中,我有以下代码:

library(dplyr)
library(sqlutils)
library(RODBC)

我的 .Rprofile 包含一个名为 .First 的函数。

.First <- function() {
    source("R/packages.R")
}

当我加载 R 时,我得到以下输出:

Loading required package: roxygen2
Loading required package: stringr
Loading required package: DBI

Attaching package: 'dplyr'

The following objects are masked from 'package:base':

    intersect, setdiff, setequal, union

如果你仔细看这个,你会发现来自 stats 的过滤器没有被屏蔽。

但是,如果我采用完全相同的设置,并注释掉 packages.R 中的 library(dplyr) 语句,保存文件,然后重新启动 R,然后手动重新启动。 . . .就像手动输入一样。 . . .

library(dplyr)

Attaching package: 'dplyr'

The following object is masked from 'package:stats':

    filter

The following objects are masked from 'package:base':

    intersect, setdiff, setequal, union

现在,它掩盖了 package::stats。

我不明白。对于这个项目,我需要大量使用来自 dplyr 的 filter 命令,并且我不想输入 dplyr::filter 来使用它。有人可以帮助我的弱智理解为什么会这样吗?我尝试在 RStudio 和 ESS 中启动 R,并且在两者中都得到了完全相同的行为。我还尝试将 dplyr 移动到 packages.R 文件的末尾,结果没有区别。我只想屏蔽 stats::filter。谢谢。

【问题讨论】:

  • 当您在 .RProfile 中加载库时,它们会在 R 启动过程的早期附加,在附加统计数据包之前。另一种方式,您在加载统计信息后附加 dplyr。由于这个原因,我看到 Hadley 建议不要在 .RProfile 中加载包(包加载顺序存在差异)。
  • ...我想您可以尝试在您在 .RProfile 中采购的脚本的开头添加 library(stats)
  • 为了笑声和傻笑,我将 library(stats) 添加到我的 packages.R 文件中。但是,这似乎是一件不必要的复杂事情。我想我会将这两个命令从我的 .First() 中拉出来,并将它们移到我所有分析文件的前面。我讨厌模板一遍又一遍地充满相同的东西,但我想在这种情况下,这是更好的选择。
  • @joran - 我不能给你答案,因为你刚刚发表了评论。如果您发布对您所说内容的影响的答案,我会检查它。
  • 你不能在脚本顶部做filter &lt;- dplyr::filter,它们基本上会被颠倒过来,调用stats::filter 来获取统计版本吗?脏,但它会工作

标签: r dplyr


【解决方案1】:

当您在.RProfile 中加载库时,它们会在 R 启动过程的早期附加,在附加 stats 包之前。另一种方式,您在 stats 已经加载之后附加 dplyr。您可以通过键入?Startup 了解 R 的启动过程。上面写着:

请注意,当获取站点和用户配置文件时仅加载基本包,因此其他包中的对象需要引用,例如utils::dump.frames 或显式加载相关包之后。

我看到 Hadley 建议不要在 .RProfile 中加载包,因为这个原因,即包加载顺序的差异,尽管我个人对此没有强烈的感觉。

一种可能的解决方案是在加载 dplyr 之前简单地将 library(stats) 添加为脚本中的第一个库调用。

另一个更全面地避免此类问题的(长期)选择是将您的工作流程从“大量脚本”转换为一个或多个包。

【讨论】:

    【解决方案2】:

    我遇到了完全相同的问题,这很烦人。如果您想像我一样抑制警告消息:-),您可以使用library(dplyr, warn.conflicts = FALSE) 加载。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-04
      • 2016-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多