[解決済み】私のggplot2構文が賢明であるときに、R CMDチェック「no visible binding for global variable」注記を処理するにはどうすればよいですか?
質問
EDIT: Hadley Wickhamの指摘により、私が間違ったことを言いました。R CMDチェックはWarningではなく、NOTESを投げています。混乱させてしまい、大変申し訳ありません。私の見落としでした。
ショートバージョン
R CMD check
を使用するたびにこのメモを投げます。
賢明なプロット作成構文
ggplot2 で。
no visible binding for global variable [variable name]
R CMD チェックがなぜそうなるかは理解できますが、そうでなければ賢明な構文の脈絡全体を犯罪にしているように思えます。私のパッケージがこのチェックにパスするために、どのような手順を踏めばよいのかわかりません。
R CMD check
で、CRANに登録されるようになりました。
背景
Sascha Epskampは以前、次のような記事を投稿しています。
本質的に同じ問題
. 違いは、私が思うに
subset()
'sのマンページ
インタラクティブに使用するように設計されています。
.
私の場合、問題は終わっていません
subset()
のコア機能である
ggplot2
を使用します。
data =
引数で指定します。
これらのノートを生成するために私が書いているコードの一例
以下は サブファンクション で マイパッケージ で、プロットにポイントを追加します。
JitteredResponsesByContrast <- function (data) {
return(
geom_point(
aes(
x = x.values,
y = y.values
),
data = data,
position = position_jitter(height = 0, width = GetDegreeOfJitter(jj))
)
)
}
R CMD check
このコードを解析すると、次のようになります。
granovagg.contr : JitteredResponsesByContrast: no visible binding for
global variable 'x.values'
granovagg.contr : JitteredResponsesByContrast: no visible binding for
global variable 'y.values'
R CMDチェックが正しい理由
このチェックは技術的に正しい。
x.values
と
y.values
-
関数内でローカルに定義されていない
JitteredResponsesByContrast()
-
フォームにあらかじめ定義されていないこと
x.values <- [something]
グローバルに、あるいは呼び出し元で。
その代わり、先に定義されたデータフレーム内の変数として、関数に渡されます。
JitteredResponsesByContrast()
.
ggplot2がRのCMDチェックに難色を示す理由
ggplot2 は、"globus" という名前のついた
data
引数を使用します。引数dataは、おそらく、このコードが実行される理由です。
library(ggplot2)
p <- ggplot(aes(x = hwy, y = cty), data = mpg)
p + geom_point()
しかし これ のコードは、object-not-found エラーを発生させます。
library(ggplot2)
hwy # a variable in the mpg dataset
2つの回避策と、どちらにも満足できない理由
NULL化戦略
Matthew Dowleのおすすめ のように、問題のある変数を最初にNULLに設定します。
JitteredResponsesByContrast <- function (data) {
x.values <- y.values <- NULL # Setting the variables to NULL first
return(
geom_point(
aes(
x = x.values,
y = y.values
),
data = data,
position = position_jitter(height = 0, width = GetDegreeOfJitter(jj))
)
)
}
私はこの解決策を高く評価しますが、3つの理由で嫌いです。
-
をなだめる以上の目的はない。
R CMD check
. -
意図が反映されない。という期待を持たせてしまいます。
aes()
を呼び出すと、NULLになった変数が表示されますが(表示されません)、本当の目的(R CMD チェックが、バインドされていることを知らない変数を認識すること)は不明確です。 - プロット要素を返す関数を書くたびに、紛らわしい NULL 文を追加しなければならないので、1 と 2 の問題は倍増します。
with() 戦略
を使用することができます。
with()
は、問題の変数がより大きな環境の中にあることを明示的に示すものです。私の場合
with()
はこのようになります。
JitteredResponsesByContrast <- function (data) {
with(data, {
geom_point(
aes(
x = x.values,
y = y.values
),
data = data,
position = position_jitter(height = 0, width = GetDegreeOfJitter(jj))
)
}
)
}
この解決策は有効です。しかし、私はこの解決策が好きではありません。なぜなら、私が期待するような方法でさえ動作しないからです。もし
with()
が本当に変数のある場所をインタープリタに指し示すという問題を解決しているのであれば、私は
必要
その
data =
引数で指定します。しかし
with()
はそのように動作しません。
library(ggplot2)
p <- ggplot()
p <- p + with(mpg, geom_point(aes(x = hwy, y = cty)))
p # will generate an error saying `hwy` is not found
ですから、繰り返しになりますが、この解決策にはNULL化戦略と同様の欠陥があると思います。
-
私はまだすべてのプロット要素の関数を調べ、ロジックを
with()
コール -
は
with()
の呼び出しは誤解を招きます。まだdata =
引数で、すべてのwith()
をなだめることです。R CMD check
.
まとめ
私が考えるに、取り得る選択肢は3つあります。
- CRANに働きかけて、ノートが偽者であることを主張し、ノートを無視するようにします。 CRANポリシー ) を作成し、パッケージを投稿するたびにそれを実行します。
-
私のコードを2つの望ましくない戦略のうちの1つ(NULL化または
with()
ブロック) - 大きな声でハミングして、問題が解決することを祈る。
この3つのどれもが私を満足させません。私は、人々が私に(そしてggplot2を利用したいと思っている他のパッケージ開発者に)何を提案するのか疑問に思っています。
どのように解決しますか?
を試しましたか?
aes_string
の代わりに
aes
? 試していませんが、これでうまくいくはずです。
aes_string(x = 'x.values', y = 'y.values')
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
R: hclust(d, method = method)でのエラー : 外部関数呼び出しは NA/NaN/Inf(arg10) を持つことができません。
-
R LanguageError in hist.default() : 'x' は数値でなければなりません.
-
Rのexpand.grid()コマンド
-
[解決済み] "エラーです。Rでテーマの書式を保存する際に「Don't know how to add RHS to the theme object」(テーマオブジェクトにRHSを追加する方法がわかりません)と表示されます。
-
[解決済み] Rでデータフレームに行を追加する方法は?
-
[解決済み] 文字列ベクトルを代入して、列名を持つ空のデータフレームを作成する?重複
-
[解決済み] R および RStudio のコンソールをクリアする関数
-
[解決済み] Rの代入演算子"="と"<-"の違いは何ですか?
-
[解決済み] 空のdata.frameを作成する
-
[解決済み] ggplot2 を使って 2 つの変数を同じグラフに線でプロットする