在闪亮的应用程序中单击DT :: datatable的行时,隐藏textOutput() [英] Hide textOutput() when un-click row of a DT::datatable in shiny app
本文介绍了在闪亮的应用程序中单击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屋!
查看全文