在闪亮的应用程序中单击DT :: datatable的行时,隐藏textOutput() [英] Hide textOutput() when un-click row of a DT::datatable in shiny app

查看:29
本文介绍了在闪亮的应用程序中单击DT :: datatable的行时,隐藏textOutput()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我下面有一个 shiny 应用程序,其中,当用户单击数据表的一行时,子集出现在另一个数据框 df 中,并显示文本.

当我按下 Next actionbutton()时,文本将显示子数据框下一行的数据.

但是当未单击该行时,我希望此消息再次隐藏.

  shinyApp(ui<-fluidPage(DT :: dataTableOutput('tableId'),textOutput("celltext"),actionButton(下一个",下一个")),服务器<-功能(输入,输出){rv<-reactValues(text = NULL)dt<-reactValues(数据= NULL)rnum<-reactVal(0)output $ tableId = DT :: renderDataTable(iris [,c(1,5)],选择=列表(目标=行",模式=单个"))物种< -c("setosa","setosa","virginica","virginica","setosa","setosa","virginica","virginica")花< -c("a","b","c","d","e","f","g","h")得分< -c(7,5,6,9,1,2,3,4)df< -data.frame(种类,花,分数)watchEvent(input $ tableId_rows_selected,{if(is.null(input $ tableId_rows_selected)){返回(NULL)}别的{第<行-输入$ tableId_rows_selecteddat< -df [df $ species%in%iris [row,5],]dt $ data< -dat [order(dat $ score,decreasing = T),]rv $ text<-paste(花",dt $ data [1,2],有分数",dt $ data [1,3])朗姆酒(1)输出$ celltext<-renderText({rv $文本})}})watchEvent(input [['next']],{rnum(rnum()+ 1)rv $ text<-paste(花",dt $ data [rnum(),2],有分数",dt $ data [rnum(),3])})}) 

解决方案

您可以在呈现 celltext 时检查 input $ tableId_rows_selected 的长度.

 库(发光)ShinyApp(ui<-fluidPage(DT :: dataTableOutput('tableId'),textOutput("celltext"),actionButton(下一个",下一个")),服务器<-功能(输入,输出){rv<-reactValues(text = NULL)dt<-reactValues(数据= NULL)rnum<-reactVal(0)output $ tableId = DT :: renderDataTable(iris [,c(1,5)],选择=列表(目标=行",模式=单个"))物种< -c("setosa","setosa","virginica","virginica","setosa","setosa","virginica","virginica")花< -c("a","b","c","d","e","f","g","h")得分< -c(7,5,6,9,1,2,3,4)df< -data.frame(种类,花,分数)watchEvent(input $ tableId_rows_selected,{if(is.null(input $ tableId_rows_selected)){返回(NULL)}别的{第<行-输入$ tableId_rows_selecteddat< -df [df $ species%in%iris [row,5],]dt $ data< -dat [order(dat $ score,decreasing = T),]rv $ text<-paste(花",dt $ data [1,2],有分数",dt $ data [1,3])朗姆酒(1)输出$ celltext<-renderText({if(length(input(输入$ tableId_rows_selected))rv $文本别的 ''})}})watchEvent(input [['next']],{rnum(rnum()+ 1)rv $ text<-paste(花",dt $ data [rnum(),2],有分数",dt $ data [rnum(),3])})}) 

I have the shiny app below in which when the user clicks on a row of the datatable a subset happens in another dataframe df and a text is displayed.

When I press the Next actionbutton() the text displayes the data of the next row of the subseted dataframe.

But when the row is un-clicked I want this message to be hidden again.

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])
    })
  }
)

解决方案

You can check for the length of input$tableId_rows_selected while rendering celltext.

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])
    })
  }
)

这篇关于在闪亮的应用程序中单击DT :: datatable的行时,隐藏textOutput()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆