2011-01-17 7 views
1

更新、犯人は、私は今日まで、少し問題でggplotのRパッケージを使用しているreshape::renameggplot「名前の変更でエラー」


をオーバーライド自分rename関数でした。今日、私は以前に動作していたコードを使用してエラーが発生し、それを最小限の動作例にデバッグするとエラーが発生します。

私はこれを行う場合:

library(ggplot2) 
d<- data.frame(x=1:3,y=1:3) 
ggplot(data=d) + geom_line(aes(x,y)) 

を次のエラーが返されます。

Error in rename(x, .base_to_ggplot) : 
    unused argument(s) (.base_to_ggplot) 

トレースバックがある:

6: rename(x, .base_to_ggplot) 
5: rename_aes(aes) 
4: aes() 
3: structure(list(data = data, layers = list(), scales = Scales$new(), 
     mapping = mapping, options = list(), coordinates = CoordCartesian$new(), 
     facet = FacetGrid$new(), plot_env = environment), class = "ggplot") 
2: ggplot.data.frame(data = d, aes = c(x, y)) 
1: ggplot(data = d, aes = c(x, y)) 

エラーが使用しているすべてのオブジェクトを削除した後に発生しません。 rm(list=ls())でも、このエラーの原因となっているオブジェクトが何であるのか、それはなぜですか?私はこれを理解できますか?

何が間違っているかも知れませんか?

答えて

1

問題はggplot2が名前空間を使用しないために発生します。これは次のリリースで修正される予定です。

+0

清算してくれてありがとう。 –

2

上記のエラーメッセージを返すことができません。 yminymaxため

Error: geom_pointrange requires the following missing aesthetics: ymin, ymax 

したがって、geom_pointrange()が期待される引数:あなたのコードスニペットを実行しているとき、私は次のエラーを取得しています。私はそれらのパラメータに行くべきもののためにあなたの適切な情報を記入するためにあなたにそれを残しておきますが、このコードが実行される:

ggplot(data=d) + geom_pointrange(aes(x,y, ymin = y - .5, ymax = y + .5))

+0

申し訳ありません。私はこの例を私の端末からコピーするのではなく、すぐに書きました。 geom_lineでエラーが発生し、サンプルコードが変更されました。 –

+0

@David - doh!謝罪いたします。しかし、私はよく更新されたコードを実行することができます。あなたの環境の中で問題を引き起こしているようなものかもしれません...そして、私はおそらくその分野で助けてくれるのではないでしょう。空白の環境でRの新しいインスタンスを開始すると、問題を再現できますか? – Chase

+0

いいえ、私はエラーを再現することはできません...そして、 'rm(list = ls()) 'によって再現されないようにすることができます。少なくとも私はデバッグのために噛むべきことがあります。 –

1

エラーは、オブジェクトのいずれかによって引き起こされた(からのポインタのおかげで@追跡)。

ここで私はデバッグして原因を見つけました。

... 
[1] "45 reg.model" 
Error in rename(x, .base_to_ggplot) : 
    unused argument(s) (.base_to_ggplot) 
[1] "46 reg.parms" 
Error in rename(x, .base_to_ggplot) : 
    unused argument(s) (.base_to_ggplot) 
[1] "47 rename" 
[1] "48 samples" 
... 

AHA:重要な部分は、これは次の出力が生じたエラー

foo <- ls() #get a static list of all suspect objects 
for(i in 1:length(foo)) { 
    print(foo[i]) 
    rm(list=foo[i]) 
    try(ggplot()+geom_point(aes(x=1:2,y=1:2))) 
} 

にもかかわらず、実行中のループのために続けtry()機能を使用していました! ggplot2reshape::renameに依存していたため、エラーが発生したのは自分の関数renameでした。

ソリューション:新しいrename機能の名前を変更してください...これを今後どのように防ぐには?おそらく、名前空間の使用について勉強してください。

+0

デバッグに 'ls()'を使用するのが好きです。私はそれについて考えなかったでしょう。それはうまくいってうれしい! – Chase

関連する問題