Отображение значения бара, созданного в R, используя блестящий и плотно

Если вы запустите приведенный ниже сценарий R блестящий, мы получим два поля на панели инструментов, в левом блоке будет столбчатая диаграмма, а в правой - таблица DT, когда я нажимаю на любой столбец диаграммы с помощью event_data("plotly_click"), я хочу Кроме того, соответствующий сотрудник, который будет отображаться в таблице, например, при нажатии на первую полосу, в таблице должен отображаться "r1". Я попытался сделать "user_cases$base1[d[3]]", но он выдает ошибку как "Ошибка: недопустимый тип индекса" список "". Я приложу снимок для справки, пожалуйста, помогите мне с тем же.

## app.R ##
library(shiny)
library(shinydashboard)
library(ggplot2)
library(plotly)
library(DT)
ui <- dashboardPage(
dashboardHeader(title = "Sankey Chart"),
dashboardSidebar(
width = 0
),
dashboardBody(
box(title = "Sankey Chart", status = "primary",height = "455" ,solidHeader = 
T,
plotlyOutput("sankey_plot")),

box( title = "Case Summary", status = "primary", height = "455",solidHeader 
= T, 
     dataTableOutput("sankey_table"))
)
)
server <- function(input, output) 
{ 

output$sankey_plot <- renderPlotly({
height2 = c(56,45,23,19,8)
base1 = c("r1","r4","r2","r5","r3")
user_cases = data.frame(base1,height2)
pp1 <<- ggplot(user_cases, aes(x = reorder(base1,-height2), y = height2)) + 
  geom_bar(stat = "identity", fill = "#3399ff" ) + scale_y_discrete(name 
="Cases") + scale_x_discrete(name = "Employee")
ggplotly(pp1, tooltip="text",height = 392)
})
output$sankey_table <- renderDataTable({
d <- event_data("plotly_click")
user_cases$base1[d[3]]
})
}
shinyApp(ui, server)

DT таблица с гистограммой

Набор данных для извлечения

Я пытаюсь получить подмножество данных из набора данных пациентов из библиотеки bupaR. Код для этого выглядит следующим образом:

patients_final <- patients[patients$employee == as.data.frame( 
user_time$employee[as.numeric(d[3])])]

но я получаю сообщение об ошибке: "Не могу использовать матрицу или массив для индексации столбца", прикрепляя снимок для справки.

Снимок для гистограммы

1 ответ

Решение

Посмотрите на модифицированный код, я изменился user_cases$base1[d[3]] в as.data.frame(user_cases$base1[as.numeric(d[3])])

 ## app.R ##
  library(shiny)
  library(shinydashboard)
  library(ggplot2)
  library(plotly)
  library(DT)


  height2 = c(56,45,23,19,8)
  base1 = c("r1","r4","r2","r5","r3")
  user_cases = data.frame(base1,height2)


  ui <- dashboardPage(
    dashboardHeader(title = "Sankey Chart"),
    dashboardSidebar(
      width = 0
    ),
    dashboardBody(
      box(title = "Sankey Chart", status = "primary",height = "455" ,solidHeader = 
            T,
          plotlyOutput("sankey_plot")),

      box( title = "Case Summary", status = "primary", height = "455",solidHeader 
           = T, 
           dataTableOutput("sankey_table"))
    )
  )


  server <- function(input, output) 
  { 

    output$sankey_plot <- renderPlotly({

      pp1 <<- ggplot(user_cases, aes(x = reorder(base1,-height2), y = height2)) + 
        geom_bar(stat = "identity", fill = "#3399ff" ) + scale_y_discrete(name 
                                                                          ="Cases") + scale_x_discrete(name = "Employee")
      ggplotly(pp1, tooltip="text",height = 392)
    })
    output$sankey_table <- renderDataTable({
      d <- event_data("plotly_click")
     as.data.frame( user_cases$base1[as.numeric(d[3])])
    })
  }
  shinyApp(ui, server)

Вывод как показано ниже:

Вы можете изменить dataframe вывод согласно вашему требованию.

Надеюсь, поможет!

Другие вопросы по тегам