私は非常に似た2つのデータフレームを持っていますが、ggplot2
は異なって見えます。内容は同じですが、データ構造は微妙に異なります。 1つはdata.frame
、もう1つはdata_frame
です。 ggplot2
の違いを理解したいと思います。以下の例では、両方ともstat_function
で使用されています。 data.frame
はプロットを生成し、data_frame
はエラーを生成します。これは、Hadleyverseのパッケージの相互運用性を考慮すると特に混乱します。 Dplyr(dplyrはdata.framesをdata_framesに変換する)によって生成されたデータフレームからプロットを作成することができなかったことを発見したときに、この問題に直面しましたが、データフレームは同じであると思いました。 data.frame)はうまくいきました。なぜggplot2はdata.frameとdata_frameを別々に見るのですか?
例1
まず、data.frame
から作業バージョン。
library(ggplot2)
library(dplyr)
d.f <- data.frame(mean = 0, sd = 1)
d_f <- data_frame(mean = 0, sd = 1)
ggplot(data.frame(x=-3:3), aes(x)) +
stat_function(fun = function (x) dnorm(x, mean = d.f[1,1], sd = d.f[1,2]))
そして今data_frame
から非作業バージョン。
ggplot(data.frame(x=-3:3), aes(x)) +
stat_function(fun = function (x) dnorm(x, mean = d_f[1,1], sd = d_f[1,2]))
## Warning message:
## Computation failed in `stat_function()`:
## Non-numeric argument to mathematical function
例2
おそらく根本的な問題は同じであるが、この例では、異なるエラーメッセージを生成します。まず、data.frame
の作業バージョン。
logistic <- function (x) { 1/(1 + exp(-x)) }
d.f <- data.frame(b0 = -9, b1 = 0.8)
d_f <- data_frame(b0 = -9, b1 = 0.8)
ggplot(data.frame(x=0:20), aes(x)) +
stat_function(fun = function (x) logistic(d.f[1,1] + d.f[1,2] * x))
そしてここdata_frame
と非作業バージョンです。
ggplot(data.frame(x=0:20), aes(x)) +
stat_function(fun = function (x) logistic(d_f[1,1] + d_f[1,2] * x))
## Error in eval(expr, envir, enclos) : object 'y' not found
'pull(d_f [1,2])'を試してください。それはサブセット化した後でもまだまだです。しかし、ggplotは 'pull'を修正するベクトルを期待しています。見てください[ここ](https://stackoverflow.com/questions/21618423/extract-a-dplyr-tbl-column-as-a-vector) – Jimbou
ggplotではありません。真実は、 'data_frame'はいくつかの重要な点で**' ** data.frame'ではなく、あなたはそれらの1つを発見しました。ハドレーは、 'data.frame'のデフォルト動作のいくつかを気に入らず、意図的に' data_frame'の動作が異なっていると判断しました。ユーザーは注意してください。 – joran
... 'd.f [1,1、drop = FALSE]'を実行して 'data.frame'sで同じエラーを生成することができます。 – joran