Динамически выбранные переменные в графике некорректно отображаются при сохранении в списке, но работают - PullRequest
0 голосов
/ 13 февраля 2019

см. Пример с игрушкой ниже, который воспроизводит ошибку.

Оператор print внутри цикла работает как положено, и создаются 3 различные диаграммы.

Однако, когда "lst" запускается послеВ цикле я ожидал, что будут отображаться те же 3 различных диаграммы, но я просто получаю 3 копии одного (третьего) графика.

("get ()" работает, когда используется динамически выбранный график, но сэто в списке, запутывает это.)

library(plotly)

lst <- list()
cnt <- 1
for(bar in c("Sepal.Width", "Petal.Length", "Petal.Width")){
  lst[[cnt]] <- plot_ly(data = iris,
                        x = ~Sepal.Length,
                        y = ~get(bar),
                        type = "scatter",
                        mode = "markers")
  print(lst[[cnt]] %>% layout(title = paste(bar, "printed in loop")))
  cnt <- cnt + 1
}
lst

Изменение "~ get (bar)" на ниже решает это.Буду благодарен за объяснение.

y = as.formula(paste0("~", bar))

1 Ответ

0 голосов
/ 14 февраля 2019

Вам необходимо визуализировать объекты-участки перед передачей их в ваш список, используя plotly_build():

library(plotly)

lst <- list()
for(bar in c("Sepal.Width", "Petal.Length", "Petal.Width")){
  lst[[bar]] <- plot_ly(data = iris,
                        x = ~Sepal.Length,
                        y = ~get(bar),
                        type = "scatter",
                        mode = "markers") %>% plotly_build()
  print(lst[[bar]] %>% layout(title = paste(bar, "printed in loop")))
}

lst$Sepal.Width
lst$Petal.Length
lst$Petal.Width
...