2017-01-19 36 views
0

作爲長期的政策,我避免將名稱導入(又名「污染」)當前範圍,而是完全使用引用不同軟件包中定義的項目時使用限定名稱。如何避免污染當前範圍(使用`library(...)`)

下面的腳本顯示,在R中,使用限定名稱本身是不夠的。

#!/usr/bin/env Rscript 

set.seed(0) 

x <- local({ 
     x0 <- matrix(rnbinom(80, size = 5, mu = 10), nrow = 20) 
     `rownames<-`(rbind(0, c(0, 0, 2, 2), x0), 
         paste("Tag", 1:(nrow(x0) + 2), sep = ".")) 
    }) 

y <- edgeR::DGEList(counts = x, 
        group = rep(1:2, each = 2), 
        lib.size = 1001:1004) 

## library(edgeR) 

y[1, 1] 

腳本失敗

Error in y[1, 1] : incorrect number of dimensions 
Execution halted 

腳本的唯一的罪過似乎沒有列入該行library(edgeR)某處失敗的語句之前,因爲錯誤消失,如果一個非註釋被註釋掉線。

這是伏都教,imho。

有沒有辦法避免錯誤而不污染當前範圍library(edgeR)

+2

看看模塊包。 –

+0

@ G.Grothendieck:謝謝你的建議,但我承認,在瀏覽'modules'網站後,我不清楚這個軟件包在這種情況下會有什麼幫助。你介意詳細介紹一下嗎? – kjo

回答

2

當您避免加載edgeR程序包時,還可避免加載執行y[1, 1]所必需的[.DGEList方法。如果你不喜歡加載edgeR庫,你需要直接調用提取功能:

edgeR::`[.DGEList`(y, 1, 1) 

如果你不喜歡完全合格的語法,你可以在你需要

方法帶來
`[.DGEList` <- edgeR::`[.DGEList` 

然後y[1, 1]將按預期工作。但這是另一種污染形式,我不確定我會推薦它作爲一種通用解決方案。

+0

謝謝!順便說一句,我不認爲'\'[.DGEList \'< - edgeR :: \'[.DGEList \''污染,因爲它是明確的。 – kjo