1

R で plot_ly() の周りにカスタム関数を書きたいと思います。そうすれば、同じフォーマットとスタイルで一連の散布図を作成できますが、コードは重複しません。このページをガイドとして使用しました。このコードはエラーを再現します:

library(plotly)
my_plot <- function(x, y, ...) {
  require(broom)
  plot_ly(data = mtcars, y = y, x = x, showlegend = FALSE, ...) %>%
    add_markers(y = y) %>%
    add_lines(y = ~fitted(lm(y ~ x))) %>%
    add_ribbons(data = augment(lm(y ~ x, data = mtcars)),
                ymin = ~.fitted - 1.96 * .se.fit,
                ymax = ~.fitted + 1.96 * .se.fit,
                line = list(color = 'rgba(7, 164, 181, 0.05)'),
                fillcolor = 'rgba(7, 164, 181, 0.2)',
                name = "Standard Error")
}
my_plot(y = ~mpg, x = ~disp)

問題の行は次のとおりです。

add_lines(y = ~fitted(lm(y ~ x))) %>%

as.formula()を使ってみましたが、エラーメッセージは似ています。

add_lines(y = ~fitted(lm(as.formula("y ~ x"))) %>%

エラーメッセージは次のとおりです。

model.frame.default(formula = y ~ x, data = mtcars, drop.unused.levels = TRUE) のエラー: オブジェクトは行列ではありません

関数ではない場合、コードは機能します。

library(plotly)
library(broom)
plot_ly(data = mtcars, y = ~mpg, x = ~disp, showlegend = FALSE) %>%
  add_markers(y = ~mpg) %>%
  add_lines(y = ~fitted(lm(mpg ~ disp))) %>%
  add_ribbons(data = augment(lm(mpg ~ disp, data = mtcars)),
            ymin = ~.fitted - 1.96 * .se.fit,
            ymax = ~.fitted + 1.96 * .se.fit,
            line = list(color = 'rgba(7, 164, 181, 0.05)'),
            fillcolor = 'rgba(7, 164, 181, 0.2)',
            name = "Standard Error")
4

1 に答える 1