Я хочу иметь возможность выбрать несколько строк в DT и иметь совокупный процент от значения столбца, представленного в шкале flexdashboard
.Мне нужно позвонить из выбранных строк, так как я планирую использовать это с crosstalk
, где строки будут выбраны на точечных графиках или картах.
Этот игрушечный пример позволяет мне создать DT, где я могущелкните по строкам 2-10, и напечатанное значение selectedRow()
покажет мне совокупную сумму столбца Petal.width, а индикатор отобразит сумму именно так, как я хочу.
library(shiny)
library(DT)
library(flexdashboard)
shinyApp(
ui = fluidPage(
textOutput('list'),
DTOutput('table'),
flexdashboard::gaugeOutput("plt1")
),
server = function(input, output, session) {
iris2<-iris %>% mutate(perc=round((Petal.Width/sum(Petal.Width))*100,1))
selectedRow <- eventReactive(input$table_rows_selected,{
selrow<-cumsum(iris2$perc)[c(input$table_rows_selected)]
tail(selrow, n=1)
})
output$plt1 <- flexdashboard::renderGauge({
gauge(selectedRow(), min = 0, max = 100, symbol = '%', gaugeSectors(
success = c(80, 100), warning = c(40, 79), danger = c(0, 39)))
})
output$list<-renderText({
selectedRow()
})
output$table <- renderDT({iris2})
}
)
ui <- fluidPage(
mainPanel(
verbatimTextOutput('list'),
dataTableOutput('table')
)
)
Однако, если я выбираю строки 2-10, а затем выбираю первую строку, датчик сбрасывается до значения, присутствующего только в первой строке.Я просмотрел документацию DT и не смог найти очевидного способа изменить это, поэтому попытался выбрать только хвост значения cumsum
в selectedRow()
, но это не сработало.
Есть ли способ получить реактивно выбранную совокупную сумму Petal.width, независимо от порядка, в котором выбираются строки DT?