R, блестящий: реактивный data.frame как фактор, установить уровни и порядок - PullRequest
0 голосов
/ 04 октября 2018

В моем блестящем приложении у меня есть data.frame, который реагирует.Затем data.frame передается ggplot, и создается блок-схема.Тем не менее, я хотел бы установить точный порядок столбцов в диаграмме.Это я могу сделать с

    JOIN11$ID_Polymer <- factor(JOIN11$ID_Polymer, 
                            levels=JOIN11$ID_Polymer[order(JOIN11[["Content"]])])

в моем R-скрипте (function(), который подготавливает данные вне блестящего сервера).

Я хотел бы установить порядок на блестящем серверетаким образом, пользователь может изменить аргумент упорядочения (пользователь может решить, хочет ли он упорядочить data.frame по «содержимому» или по другому столбцу, который он выберет).Я пытался что-то вроде этого:

dataforplot <- reactive({
  plot_data <-  data() %>% 
    filter(Name %in% input$polymers) 
   plot_data$ID_Polymer <- factor(plot_data$ID_Polymer, 
          levels =plot_data$ID_Polymer[ order(plot_data[["Content"]])])
})

, который не работает (ggplot не отображается), ошибка говорит: data must be a data frame, or other object coercible by fortify () , not a factor.

функция для ggplot выглядит следующим образом:

  plotInput <- reactive({



    ggplot(data = dataforplot(), aes(x = ID_Polymer, y = value), position = position_dodge(width = 1))  +
      geom_bar(aes_string( fill=razeni()), position = position_dodge(width = 1), stat="identity", color="white")+
      theme_minimal() +
      theme(legend.text=element_text(size=21))+
      theme(text = element_text(size=21))+
      theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank()) +
      ggtitle(input$title_text_box_id) + 
      labs(x = "", y = input$ylabel_text_box_id) + 
      geom_text(aes(x = ID_Polymer, y = value,Group=Polymer,label=value), 
                position = position_dodge(width = 1),vjust=2, size=5,colour = "white", fontface = "bold") +
      scale_fill_tableau("Tableau 10")+
     scale_x_discrete(labels=c(xpopisky()))#puts a reactive in x labels

  })

Она работает, когда я не пытаюсь установить порядок на data.fram, когда я пропускаю

plot_data$ID_Polymer <- factor(plot_data$ID_Polymer, 
          levels =plot_data$ID_Polymer[ order(plot_data[["Content"]])])

Как это решить?

1 Ответ

0 голосов
/ 04 октября 2018

Когда вы используете:

dataforplot <- reactive({
  plot_data <-  data() %>% 
    filter(Name %in% input$polymers) 
   plot_data$ID_Polymer <- factor(plot_data$ID_Polymer, 
          levels =plot_data$ID_Polymer[ order(plot_data[["Content"]])])
})

Последняя строка того, что находится внутри вашего reactive(), возвращается как значение этого реактивного элемента.Следовательно, в вашем случае plot_data$ID_Polymer (который не является фреймом данных, а столбцом фактора фрейма данных) возвращается как dataforplot().Это причина ошибки.Измените ваше dataforplot() определение на:

dataforplot <- reactive({
  plot_data <-  data() %>% 
    filter(Name %in% input$polymers) 
   plot_data$ID_Polymer <- factor(plot_data$ID_Polymer, 
          levels =plot_data$ID_Polymer[ order(plot_data[["Content"]])])
   # Add return statement for returning the dataframe
   return(plot_data)
})
...