1

これは、関数を定義するファイルがある状況です。それを呼び出しましょう。tmpFunctions.Rそれとそれを使用するファイル (と呼びましょうtmpRunner.R)。の関数はtmpFunctions.R、定義されていないが、 のグローバル スコープで定義された変数を意図せずtmpRunner.Rに使用します。関数が から呼び出された時点tmpRunner.Rで、変数は既にグローバル スコアに存在するため、インタープリターはエラーを発行せず、プログラムはスムーズに実行されますが、間違った結果が生成されます。次に例を示します。

tmpFuncitons.R:

my.func <- function(x){
  return(X * 2) # typo; should be error
}

tmpRunner.R

source('tmpFunctions.R')
X <- 10  #calling my.func(...) from this point on will not cause runtime errors
for(i in seq(10)){
  print(sprintf('%s ==> %s', i, my.func(i)))
}

出力:

> source('C:/tmp/tmpRunner.R')
[1] "1 ==> 20"
[1] "2 ==> 20"
[1] "3 ==> 20"
[1] "4 ==> 20"
[1] "5 ==> 20"
[1] "6 ==> 20"
[1] "7 ==> 20"
[1] "8 ==> 20"
[1] "9 ==> 20"
[1] "10 ==> 20"

Perl の に似た方法でこれを防ぐ方法、または関数をグローバル スコープに公開せずuse strictにインポートする方法はありますか (ほとんどの場合そうではありません)。tmpFunctions.R

また、R 用のソース コード静的解析ツール (コードを実行する前に警告メッセージを取得するため) を探してみましたが、何も見つかりませんでした。

4

0 に答える 0