2016-07-10 10 views
5

インポートされたパッケージから関数を除外する方法はありますか?たとえば、私はdplyrのほぼすべてを使用していますが、最近はrecodeという新しい機能を追加しました。これは私が独自のパッケージ(私が変更できない機能)を上書きします。インポートされたパッケージから1つの関数を削除(または除外)する

名前空間からs3関数を除外する方法があるので、パッケージから関数を見るだけで、dplyrの関数は無視されます。

私は、簡単にパッケージから一回限りの関数をインポートできることに気付いていますが、この場合は除外することを検討しています。

+0

'dplyr'はいけないの後にあなたが欲しいパッケージをロードする場合あなたの望む関数は 'dplyr'をマスクしますか? –

+0

私はこれを試してみましたが、独自のパッケージがその関数を適切にエクスポートしないため、動作しません。 –

+0

を参照してください。だから、私はGitHubでdplyrをフォークし、あなたが望んでいない機能を削除することを提案しようとしていましたが、最近彼らが追加したと言えば、 'recode'を持たない最新のバージョンを使うのはなぜですか? –

答えて

9

R 3.3.0以降では現在、"import all but x,y,z from foo" statementsサポート:あなたがここに欲しい、とほとんどの人が機能オーバーdplyrクロバーからを持っているつもりはない人欲しいたい正確に何である

\item The \code{import()} namespace directive now accepts an 
    argument \code{except} which names symbols to exclude from the 
    imports. The \code{except} expression should evaluate to a 
    character vector (after substituting symbols for strings). See 
    Writing R Extensions. 

Methinks filterlagのようなRに含まれる統計パッケージ。コメントの後の議論に基づいて

編集:

次のようSection 1.5.1 of WREあたりのファイルNAMESPACEでの例の使用例は次のとおりです。

import(dplyr, except = c(recode, lag, filter)) 
+1

の呼び出しであることを意味します。これは一般的には非常に便利ですが、OPを利用している人にとっては役に立ちません'Imports:'ステートメントが明らかに変更できないプロプライエタリなパッケージ...? –

+0

'dplyr'の' Imports: 'の副作用であり、彼が不満を持ち、制御権を持っています。 Methinksこれは実際に彼が後にしていることです。私は、 'cannotTouchProprietaryPackage'は' dplyr'の_parts_と同じように、インポートされたものだと考えました。 –

+1

@DirkEddelbuettel使用例がどこかに書かれていますか? –

4

Hadleyバージョンの代わりにdplyrのHack-Rバージョンを使用してください。私が過去2分間に作成したことを考えると、自分のバージョンを簡単に作成することもできます。

require(devtools) 
install_github("hack-r/dplyr") 
require(dplyr) 

私がしたすべては、それをフォークバージョンコントロールを経由してRStudioでプロジェクトを開き、recodeを削除し、コミット、そして戻って私のGitHubにプッシュしました。

+2

確かに、あなたはRパッケージの壮大な木に腐敗した葉を作成するだけです。これが勝った、あなたのアップデートなどを取得するpp。​​ –

+0

@DirkEddelbuettel知っているが、あなたのポイントは何ですか? 1.更新にはどれくらい時間がかかりますか? 30〜60秒? 2.本当に 'dplyr'の更新が必要ですか?私が知っているほとんどの人は、プロダクションコードで使用しているパッケージのバージョンを意図的にフリーズしています(OPの問題はその理由の良い例です)。 –

+1

DebianやUbuntuや20k以上のパッケージのように、私はR、CRAN、BioC、...などのエコシステム*を真剣に機能させています。あなたは非常に自由に別の意見を持っていますが、それは自分自身(そして他の人たち)があなたが間違っていると思うのを止めることはありません。 「ハッキングのためのハッキング」は間違っていませんが、クライアントのためにBrandonがそうであるように、私は適切な制作システムを心配しています。 –

10

他の代替は、(その後、dplyrからバージョンをマスクする必要があります)グローバルワークスペース内recodeのコピーを作成するために(説明コメント付き)あなたのコードの先頭に

recode <- SILLY_PROPRIETARY_PACKAGENAME::recode 

を使用することです。これにより、個人的にハッキングされたバージョンではなく、dplyrの株価を持つ人物にコードを渡すときに、将来の混乱を防ぐことができます。

+3

私はそれをupvoteしますが、それは楽しいとハッキングの興奮が不足しているようです;) –

+1

これは実際に私のためには機能しません。何らかの形で、 'dplyr'からの' recode.numeric'は、地球環境における汎用の 'recode'関数の前にまだディスパッチされています。 –

+0

@BrandonBertelsen今、私たちはハッキーになっていますが、上記のように 'SILLY_PROPRIETARY_PACKAGE ::: recode.numeric'を追加することができます。おそらく 'eval'呼び出しを'メソッド 'から学んで、それが動作すればこれを自動化することを – MichaelChirico

関連する問題