#r #shiny #shinydashboard #shiny-reactivity
#r #блестящие #shinydashboard #блестящий-реактивность
Вопрос:
Я новичок в shiny и в r. Я создаю динамическую блестящую панель мониторинга. там, где пользователям нужно выбрать строку из первой таблицы и со значениями ячеек в нескольких столбцах, пользователям приходится фильтровать дополнительные данные, и это продолжается. Из новой второй таблицы, созданной пользователем, снова выбирается строка во второй таблице. А выбранная строка some values используется для фильтрации существующего набора данных и отображения его в блестящем виде. и так далее.
Я написал пример кода, но он не работает.
df <- data.frame(id = sample(c(1,2,3,4),15, replace = T ),
day = sample(c("Mon", "Tue", "Wed"),15, replace = T),
hour_hand = c(0:14),
price =sample(c(121,221,112,231,444), replace = T))
df_day <- df %>%
group_by(id) %>%
summarise(price = sum(price))
df_day_hour <- df %>%
group_by(id, day) %>%
summarise(price = sum(price))
ui <- dashboardPage(skin = "red",
dashboardHeader(title = "2_level_drill_down"),
dashboardSidebar(sidebarMenu(menuItem("Price", tabName = "tab_01", icon =icon("bar-chart")))),
dashboardBody(tabItems(
tabItem(tabName = "tab_01",
tabsetPanel(
tabPanel("Id", DT::dataTableOutput("table_id")),
tabPanel("ID Day", DT::dataTableOutput("table_id_day")),
tabPanel("ID Day Hour",DT::dataTableOutput ("table_id_day_hour"))))
)))
server <- function(input, output){
#Id table
output$table_id <- renderDT(DT::datatable({
data =df
}))
#Id Day group_by table
output$table_id_day <- renderDT(DT::datatable({
s = input$table_id_rows_selected
v <- unique(df[s,c("id")])
data = df_day[df_day$id %in% v,]
}))
#ID Day Hour group_by Table
output$table_id_day_hour <- renderDT({
s_3 = input$table_nodal_day_rows_selected
id_3 <- unique(id_day_df[s_2,c("id")])
day_2 <- unique(id_day_df[s_2,c("day")])
data = df_day_hour[df_day_hour$id %in% id_3 amp; df_day_hour$day %in% day_2,]
})
}
#####
shinyApp(ui,server)
Комментарии:
1. Почему это не работает? Можете ли вы описать, что происходит, и включить любые ошибки, которые вы получаете?
2. Ошибка: «данные» должны быть двумерными (например, фрейм данных или матрица)
3. Эта ошибка означает, что в какой-то момент ваш data.frame преобразуется в подмножество только одной переменной (которая упрощается до одномерного вектора, отсюда и ошибка). Я не вижу никакого очевидного места, где это происходит, но это наиболее вероятная причина ошибки. Я бы вставил
print(colnames(data))
в вашиrenderDT
инструкции, чтобы проверить, где это происходит (обязательноreturn(data)
после4. На самом деле, когда я запускаю ваш код, я не могу воспроизвести вашу ошибку. Вы также никогда не определяете,
id_day_df
что выдает другую ошибку. Без воспроизводимого примера это лучшее, что я могу сделать5. На самом деле, моя проблема в том, что вторая детализация показывает неправильные данные. Я думаю, когда я создал 2-ю динамическую таблицу после щелчка по строке первой таблицы. Эта таблица является динамической (подмножество исходной 2-й таблицы). Но после щелчка по строке 2-й таблицы (подмножество исходной 2-й таблицы) для 3-й детализации происходит захват строки и индексов исходной 2-й таблицы. Я думаю создать вкладку событий наблюдения для 2-й динамической таблицы (таблица подмножеств), чтобы зафиксировать реальное значение выбранной строки фактической таблицы, значение которой мне нужно отфильтровать в другой таблице.