3

関数が関数の本体で宣言されていない変数を使用している場合、Rでエラーメッセージをポップアップする方法はありますか:つまり、誰かにこのタイプの関数にフラグを付けてもらいたいです

aha<-function(p){
  return(p+n)
}

見る; 「n」変数がどこかにある場合、Rは「環境」と呼ばれるその不思議な場所から「n」を取得するだけなので、aha(p = 2)は「答え」を提供します。

4

3 に答える 3

18
于 2010-01-26T17:40:38.490 に答える
5

リッチーの提案はとても良いです。

クリーンな R 環境で実行される単体テスト ケースの作成を検討する必要があることを付け加えておきます。これにより、グローバル変数に関する懸念も解消され、関数が本来の方法で動作することが保証されます。これにはRUnitの使用を検討することをお勧めします。RScript を使用して、新しい環境で毎晩実行するようにテスト スイートをスケジュールしています。これは非常に効果的で、あらゆる種類のスコープの問題などをキャッチします。

于 2010-01-26T17:28:44.057 に答える
1

他の R コードをチェックするために R コードを書くのは難しいでしょう。コードのどのビットが変数宣言であるかを判断する方法を見つけてから、それらが関数内で既に宣言されているかどうかを調べてみる必要があります。codetools編集:前の声明は真実だったでしょうが、アニコが指摘したように、ハードワークはパッケージ ですでに行われています.

あなたにとって役立つかもしれない関連することの1つは、変数を(囲んでいる環境からではなく)関数自体から強制的に取得することです。

nは宣言されていないため、関数のこの変更されたバージョンは常に失敗します。

aha <- function(p) 
{ 
   n <- get("n", inherits=FALSE)
   return(p+n)
}
于 2010-01-26T17:18:17.120 に答える