2014-11-14 86 views
8

在工作中,我有一臺運行R 3.1.2的Windows 7計算機。R dplyr過濾器不屏蔽基本過濾器?

我有一個名爲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 

如果在此仔細看,你會看到從統計過濾器沒有被屏蔽。

但是,如果我採用完全相同的設置,並註釋掉package.R中的庫(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。謝謝。

+1

當您在.RProfile中加載庫時,它們會在R啓動過程的很早時刻附加到stats包之前。另一種方式是,在統計信息已經加載完成之後,您將附加dplyr。我見過Hadley建議不要在.RP檔中加載包(因爲這個原因)(包加載順序的差異)。 – joran 2014-11-14 17:03:03

+2

...我想你可以嘗試在你正在採購.RProfile的腳本開始時加入'library(stats)'。 – joran 2014-11-14 17:05:34

+0

對於咧嘴笑聲,我將library(stats)添加到我的packages.R文件中。但是,這似乎是一個不必要的複雜的事情必須做。我想我會將這兩個命令從我的.First()中移出並將它們移到我所有分析文件的前面。我討厭有一遍又一遍都充滿了同樣的事情的模板,但我想在這種情況下,這是更好的選擇。 – Choens 2014-11-14 17:18:03

回答

10

當您在.RProfile中加載庫時,它們會在R啓動過程的很早時刻附加到統計信息包之前。另一種方式,你在附加dplyr統計已經被加載。我見過Hadley建議不要在.RProfile中加載包(因爲這個原因)(包裝加載順序的差異),儘管我個人對此沒有強烈的感受。 (R的啓動過程的細節?Startup描述。)

一個可能的解決方案是簡單地添加library(stats)在腳本中的第一個庫調用,加載dplyr之前。

另一個(長期)選項可以更全面地避免這些類型的問題,將您的工作流從「大量腳本集合」轉換爲一個或多個包。

0

我有完全相同的問題,它是如此討厭。如果您想要像以前一樣抑制警告消息:-),則可以使用library(dplyr, warn.conflicts = FALSE)加載。