在闪亮的应用程序中取消单击 DT::datatable 的行时隐藏 textOutput()
Hide textOutput() when un-click row of a DT::datatable in shiny app
我有下面的 shiny
应用程序,当用户单击数据表的一行时,子集会出现在另一个数据框中 df
并显示文本。
当我按下 Next
actionbutton()
时,文本显示子集数据帧的下一行数据。
但是当取消单击该行时,我希望再次隐藏此消息。
shinyApp(
ui <- fluidPage(DT::dataTableOutput('tableId'),
textOutput("celltext"),
actionButton("next","Next")),
server <- function(input, output) {
rv <- reactiveValues(text=NULL)
dt <- reactiveValues(data=NULL)
rnum <- reactiveVal(0)
output$tableId = DT::renderDataTable(
iris[,c(1,5)], selection = list(target = 'row',mode="single")
)
species<-c("setosa","setosa","virginica","virginica","setosa","setosa","virginica","virginica")
flower<-c("a","b","c","d","e","f","g","h")
score<-c(7,5,6,9,1,2,3,4)
df<-data.frame(species,flower,score)
observeEvent(input$tableId_rows_selected, {
if(is.null(input$tableId_rows_selected)){
return(NULL)
}
else{
row <- input$tableId_rows_selected
dat<-df[df$species %in% iris[row,5],]
dt$data <-dat[order(dat$score,decreasing = T),]
rv$text <- paste("flower",dt$data[1,2],"has score",dt$data[1,3])
rnum(1)
output$celltext <- renderText({
rv$text
})
}
})
observeEvent(input[['next']], {
rnum(rnum()+1)
rv$text <- paste("flower",dt$data[rnum(),2],"has score",dt$data[rnum(),3])
})
}
)
您可以在渲染 celltext
时检查 input$tableId_rows_selected
的长度。
library(shiny)
shinyApp(
ui <- fluidPage(DT::dataTableOutput('tableId'),
textOutput("celltext"),
actionButton("next","Next")),
server <- function(input, output) {
rv <- reactiveValues(text=NULL)
dt <- reactiveValues(data=NULL)
rnum <- reactiveVal(0)
output$tableId = DT::renderDataTable(
iris[,c(1,5)], selection = list(target = 'row',mode="single")
)
species<-c("setosa","setosa","virginica","virginica","setosa","setosa","virginica","virginica")
flower<-c("a","b","c","d","e","f","g","h")
score<-c(7,5,6,9,1,2,3,4)
df<-data.frame(species,flower,score)
observeEvent(input$tableId_rows_selected, {
if(is.null(input$tableId_rows_selected)){
return(NULL)
}
else{
row <- input$tableId_rows_selected
dat<-df[df$species %in% iris[row,5],]
dt$data <-dat[order(dat$score,decreasing = T),]
rv$text <- paste("flower",dt$data[1,2],"has score",dt$data[1,3])
rnum(1)
output$celltext <- renderText({
if(length(input$tableId_rows_selected)) rv$text
else ''
})
}
})
observeEvent(input[['next']], {
rnum(rnum()+1)
rv$text <- paste("flower",dt$data[rnum(),2],"has score",dt$data[rnum(),3])
})
}
)
我有下面的 shiny
应用程序,当用户单击数据表的一行时,子集会出现在另一个数据框中 df
并显示文本。
当我按下 Next
actionbutton()
时,文本显示子集数据帧的下一行数据。
但是当取消单击该行时,我希望再次隐藏此消息。
shinyApp(
ui <- fluidPage(DT::dataTableOutput('tableId'),
textOutput("celltext"),
actionButton("next","Next")),
server <- function(input, output) {
rv <- reactiveValues(text=NULL)
dt <- reactiveValues(data=NULL)
rnum <- reactiveVal(0)
output$tableId = DT::renderDataTable(
iris[,c(1,5)], selection = list(target = 'row',mode="single")
)
species<-c("setosa","setosa","virginica","virginica","setosa","setosa","virginica","virginica")
flower<-c("a","b","c","d","e","f","g","h")
score<-c(7,5,6,9,1,2,3,4)
df<-data.frame(species,flower,score)
observeEvent(input$tableId_rows_selected, {
if(is.null(input$tableId_rows_selected)){
return(NULL)
}
else{
row <- input$tableId_rows_selected
dat<-df[df$species %in% iris[row,5],]
dt$data <-dat[order(dat$score,decreasing = T),]
rv$text <- paste("flower",dt$data[1,2],"has score",dt$data[1,3])
rnum(1)
output$celltext <- renderText({
rv$text
})
}
})
observeEvent(input[['next']], {
rnum(rnum()+1)
rv$text <- paste("flower",dt$data[rnum(),2],"has score",dt$data[rnum(),3])
})
}
)
您可以在渲染 celltext
时检查 input$tableId_rows_selected
的长度。
library(shiny)
shinyApp(
ui <- fluidPage(DT::dataTableOutput('tableId'),
textOutput("celltext"),
actionButton("next","Next")),
server <- function(input, output) {
rv <- reactiveValues(text=NULL)
dt <- reactiveValues(data=NULL)
rnum <- reactiveVal(0)
output$tableId = DT::renderDataTable(
iris[,c(1,5)], selection = list(target = 'row',mode="single")
)
species<-c("setosa","setosa","virginica","virginica","setosa","setosa","virginica","virginica")
flower<-c("a","b","c","d","e","f","g","h")
score<-c(7,5,6,9,1,2,3,4)
df<-data.frame(species,flower,score)
observeEvent(input$tableId_rows_selected, {
if(is.null(input$tableId_rows_selected)){
return(NULL)
}
else{
row <- input$tableId_rows_selected
dat<-df[df$species %in% iris[row,5],]
dt$data <-dat[order(dat$score,decreasing = T),]
rv$text <- paste("flower",dt$data[1,2],"has score",dt$data[1,3])
rnum(1)
output$celltext <- renderText({
if(length(input$tableId_rows_selected)) rv$text
else ''
})
}
})
observeEvent(input[['next']], {
rnum(rnum()+1)
rv$text <- paste("flower",dt$data[rnum(),2],"has score",dt$data[rnum(),3])
})
}
)