【发布时间】: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 <- dplyr::filter,它们基本上会被颠倒过来,调用stats::filter来获取统计版本吗?脏,但它会工作