2017-01-19 18 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 

で失敗したスクリプトの唯一の罪は、エラーが1アンコメント場合はコメントアウトを消えることから、失敗したステートメントの前にラインlibrary(edgeR)どこかに含ま持っていないように見えますライン。

これはvoodoo、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 \ ' kjo

関連する問題