R 2.15.3
以下は、ggplot2 0.9.3.1
およびgtable 0.1.2
Debian スクイーズでテストされました。
この ggplot2 の問題をデバッグする過程で 、特定のケースで annotation_custom への複数の呼び出しが失敗するため、デバッグ方法がわからないものに遭遇しました。関連情報github-ggplot2-817を使用して Bitbucket にリポジトリを作成しました 。
そのリポジトリからの関連するREADMEを以下にコピーします。Mercurial を使用したくない場合は、シリアル化された R データを含む関連ファイルをaddgrob.asc.saveから直接ダウンロードできます。
を再現するには、 https: //bitbucket.org/faheem/gtable-debianaddgrob.asc.save
の Debian パッケージを使用するか、必要に応じてスクリプトsave.Rと共にgtableaddgrob.diffへのパッチのみを使用できます。gtable
str
問題の概要:オブジェクト (ここでは と呼ばれる) でR の関数を実行すると、 がロードされx
ている場合はエラーが発生しますggplot2
が、そうでない場合は発生しません。何が起こっているのかわからないので、ポインタをいただければ幸いです。
###############################################################
このバグを再現するには、次の手順を実行します。
R を起動します。
> ls()
character(0)
> load("addgrob.asc.save")
> ls()
[1] "grobs" "layout" "x"
> str(x, max.level=1)
List of 10
$ grobs :List of 8
$ layout :'data.frame': 8 obs. of 7 variables:
$ widths :Class 'unit' atomic [1:6] 1.5 6.096 0.762 1.961 0 ...
.. ..- attr(*, "unit")= chr "mm"
.. ..- attr(*, "valid.unit")= int 7
$ heights :Class 'unit' atomic [1:7] 1.5 2.53 1.52 6.1 6.1 ...
.. ..- attr(*, "unit")= chr "mm"
.. ..- attr(*, "valid.unit")= int 7
$ respect : logi FALSE
$ rownames: NULL
$ colnames: NULL
$ name : chr "layout"
$ gp : NULL
$ vp : NULL
- attr(*, "class")= chr [1:3] "gtable" "grob" "gDesc"
## Now update x
> x$grobs <- c(x$grobs, grobs)
> x$layout <- rbind(x$layout, layout)
> str(x, max.level=1)
List of 10
$ grobs :List of 11
$ layout :'data.frame': 11 obs. of 7 variables:
$ widths :Class 'unit' atomic [1:6] 1.5 6.096 0.762 1.961 0 ...
.. ..- attr(*, "unit")= chr "mm"
.. ..- attr(*, "valid.unit")= int 7
$ heights :Class 'unit' atomic [1:7] 1.5 2.53 1.52 6.1 6.1 ...
.. ..- attr(*, "unit")= chr "mm"
.. ..- attr(*, "valid.unit")= int 7
$ respect : logi FALSE
$ rownames: NULL
$ colnames: NULL
$ name : chr "layout"
$ gp : NULL
$ vp : NULL
- attr(*, "class")= chr [1:3] "gtable" "grob" "gDesc"
> library(ggplot2)
> str(x, max.level=1)
List of 11
$ grobs :List of 11
$ layout :'data.frame': 11 obs. of 7 variables:
$ widths :Class 'unit' atomic [1:6] 1.5 6.096 0.762 1.961 0 ...
.. ..- attr(*, "unit")= chr "mm"
.. ..- attr(*, "valid.unit")= int 7
$ heights :Class 'unit' atomic [1:7] 1.5 2.53 1.52 6.1 6.1 ...
.. ..- attr(*, "unit")= chr "mm"
.. ..- attr(*, "valid.unit")= int 7
$ respect : logi FALSE
$ rownames: NULL
$ colnames: NULL
$ name : chr "layout"
$ gp : NULL
$ vp : NULL
$ NA:Error in object[[i]] : subscript out of bounds
ロードしても、以前のバージョンの でエラーが発生するggplot2
ことはありません。x
str
> ls()
character(0)
> load("addgrob.asc.save")
l> ls()
[1] "grobs" "layout" "x"
> library(ggplot2)
> str(x, max.level=1)
List of 8
$ grobs :List of 8
$ layout :'data.frame': 8 obs. of 7 variables:
$ widths :Class 'unit' atomic [1:6] 1.5 6.096 0.762 1.961 0 ...
.. ..- attr(*, "unit")= chr "mm"
.. ..- attr(*, "valid.unit")= int 7
$ heights :Class 'unit' atomic [1:7] 1.5 2.53 1.52 6.1 6.1 ...
.. ..- attr(*, "unit")= chr "mm"
.. ..- attr(*, "valid.unit")= int 7
$ respect : logi FALSE
$ rownames: NULL
$ colnames: NULL
$ name : chr "layout"
- attr(*, "class")= chr [1:3] "gtable" "grob" "gDesc"
traceback() の出力は
> traceback()
2: str.default(x, max.level = 1)
1: str(x, max.level = 1)
補遺: Python では、関数が実行されたときに呼び出されるすべてのコード行がファイルに書き込まれるように設定することができます。Google で検索しましたが、思いついたのはさまざまなデバッグ ユーティリティだけでした。
ADDENDUM2: 問題を作成しました。このため、str 関数が ggplot2 オブジェクトでエラーで失敗します。