2016-03-22 21 views
0

新しいRパッケージを作成していて、明示的にパッケージ内の関数に(入力引数として)渡されなかった変数が表示されていることがわかります。Rパッケージに渡されない変数が表示される

myFunc <- function(a,b,c) { 
    print(d) 
} 

ここでdは発信者.Rスクリプトにありますが、myFuncに渡されていません。

ご協力いただきありがとうございます。私はR 3.2.4を使用しており、roxygen2devtools::document()経由)を使用してNAMESPACEを作成しています。

+1

この現象は、パッケージをインストールした後、または開発/テストプロセス中にのみ発生しますか? – nrussell

+0

パッケージがインストールされた後、 'R CMD INSTALL myPackage'を実行した後、.Rスクリプトをパッケージ外に呼び出すと、myFunc()が呼び出されます。 –

+0

これは、Rのスコープ規則によるものです。この共通の問題に対処するのに役立つCRANに新しいモジュール 'modules'があります。 @stradoverflow.com/questions/6216968/r-force-local-scope?lq=1 – Uwe

答えて

1

Rのスコープルールの結果ではありませんか?

この関数では、新しいmyFunc環境が定義されています。 dprint(d)で参照しようとすると、インタープリタはまずdというオブジェクトの環境をmyFuncでチェックします。そのようなオブジェクトが存在しないため、インタープリターは呼び出し環境でdというオブジェクトをチェックします。それは、あなたの.Rスクリプトで定義された変数を見つけて、それを印刷します。

ここにa linkがあり、さらに多くの情報と多数の例があります。

0

非常に有用なリンク、ありがとう。投稿checkStrict機能を使用してR force local scope

:それは関数内で制限されたスコープを強制するようになります(つまり、グローバルスコープにアクセスしないように機能を取得)R.

のデフォルトのプロパティではありません、私はここに同様の質問を見つけましたその質問への主な応答者によって働いたようだ。意図しないグローバル変数の使用が検出されました。

​​

ここで、showDendroは私のカスタムパッケージ内の機能です。

だから、私の問題への解決策があるようです:あなたは退屈な解決策のように思えるlocal()機能、にすべての機能を囲むことで、地球環境まで移動するからRを止めることができますが)

1。

2)コードを一般環境から独自の関数に移動するときは、checkStrictのようなものを実行して、意図しないグローバル変数の使用を削除します。

関連する問題