パッケージに関数があるとしましょう
my_fn <- function() {
mtcars_dt <- data.table::data.table(mtcars)
mtcars_dt[, mpg_div_hp := mpg / hp]
mtcars_dt
}
私.Renvironには設定があります_R_CHECK_CODETOOLS_PROFILE_="suppressUndefined=TRUE"。これにより、codetoolsパッケージが実行中に実行されたときに、次のR CMD checkような警告が返されなくなります。
my_fn: no visible binding for global variable 'mpg_div_hp'
ただし、次のようないくつかのグローバル変数を定義した場合
utils::globalVariables(c("mpg", "hp"))
私のパッケージ ドキュメント内では、すべての変数がバインドされていないR CMD checkと識別されます。関数がファイル内のオプションを上書きしているかのようです。globalVariables()"suppressUndefined=TRUE".Renviron
私の質問は、なぜこれが起こっているのですか? 詳細については、読み進めてください。
一見 2 つの「単純な」ソリューションがあります。
package.Rファイル内で変数を定義せず、codetoolsオプションでそれらすべてを処理できるようにします。- 関数内ですべてのグローバル変数を定義し、オプション
globalVariables()を使用しないでください。codetools
残念ながら、関数の一部のRHS のみをチェックするため、lintrパッケージを使用する場合、最初のオプションは適切ではありません。したがって、変数と関数を含めることが、この問題に遭遇した理由です。のオプションももちろん使えますが、物足りない感じです。2 番目のオプションでは、1000 個を超える変数のベクトルが必要になり、良い解決策とは思えません。lintrmpg_div_hp := mpg / hp"mpg""hp"globalVariablesobject_usage_linter=NULLlintr