CopyPastor

Detecting plagiarism made easy.

Score: 0.8387169771365565; Reported for: String similarity Open both answers

Possible Plagiarism

Reposted on 2021-02-21
by YBS

Original Post

Original - Posted on 2021-02-20
by YBS



            
Present in both answers; Present only in the new answer; Present only in the old answer;

You need to check if the button has been clicked. Try this


ui <- fluidPage( useShinyjs(), navbarPage(title = "Stackoverflow help", id = "tabs", tabPanel("Home", sidebarPanel( fileInput("file", "Upload data", accept = c( "text/csv", "text/comma-separated-values,text/plain", ".csv") ), #checkboxInput("header", "Header", TRUE), actionButton("append", "Add new tab"), uiOutput('tabnamesui') ), mainPanel( ) ) ) ) server <- function(input, output, session) { userfile <- reactive({ input$file }) filereact <- reactive({ read.table( file = userfile()$datapath, sep = ',', header = T, stringsAsFactors = T ) }) tabsnames <- reactive({ names(filereact()) }) output$tabnamesui <- renderUI({ req(userfile()) selectInput( 'tabnamesui', h5('Tab names'), choices = as.list(tabsnames()), selected="",multiple = FALSE ) }) tabnamesinput <- reactive({ input$tabnamesui}) #Append selected tab logic observeEvent(input$append,{ appendTab(inputId = "tabs", tabPanel(input$tabnamesui, sidebarPanel( actionButton(paste0("remove_", input$tabnamesui), "Delete")), mainPanel( #uiOutput("tabsets") #This is where I think something is broken DTOutput(paste0("table",input$tabnamesui)), plotOutput(paste0("plot",input$tabnamesui)) ) ) ) }) # Delete selected tab logic observeEvent(lapply(grep(pattern = "^remove_", x = names(input), value = TRUE), function(x){input[[x]]}),{ if(input$tabs != "Home"){ if (input[[paste0("remove_",input$tabs)]]) { ## remove tab only if delete button has been clicked removeTab(inputId = "tabs", target = input$tabs) updateSelectInput(session, "tabnamesui", selected = input$tabnamesui) # keep the selection when re-rendering sidebarPanel } } }) #New tab logic to prevent inserting same tab twice with enable/disable action button forcecombine = function(idtab,checker) { colnames(idtab) = colnames(checker) rbind(idtab,checker) } checker<-as.data.frame("checker") idtab<-as.data.frame("checkers") #only allow tab entry once observeEvent(input$append, { idtab <- paste0(tabnamesinput()) idtab<-as.data.frame(idtab) checkerx<-forcecombine(idtab,checker) repeated<-length(grep(idtab,checkerx)) if(repeated==1) { shinyjs::disable("append") } else {shinyjs::enable("append") } }) observeEvent(input$tabnamesui, { shinyjs::enable("append") output[[paste0("plot",input$tabnamesui)]] <- renderPlot(plot(cars)) lapply(tabnamesinput(), function(x) { df <- as.data.table(filereact()[[as.name(tabnamesinput())]]) output[[paste0('table',x)]] <- renderDT({ df #subsetdata()[[x]] })}) }) shinyjs::disable("append") observeEvent(input$file, { shinyjs::enable("append") }) } shinyApp(ui, server)

You cannot output same `ID` in multiple tabs. Once you fix that, it works. You still need to define what you wish to display in each tab. I am just displaying a filtered table and a sample plot. Also, tab removal required minor tweak. Working code is shown below.


ui <- fluidPage( useShinyjs(), navbarPage(title = "Stackoverflow help", id = "tabs", tabPanel("Home", sidebarPanel( fileInput("file", "Upload data", accept = c( "text/csv", "text/comma-separated-values,text/plain", ".csv") ), #checkboxInput("header", "Header", TRUE), actionButton("append", "Add new tab"), uiOutput('tabnamesui') ), mainPanel( ) ) ) ) server <- function(input, output, session) { userfile <- reactive({ input$file }) filereact <- reactive({ read.table( file = userfile()$datapath, sep = ',', header = T, stringsAsFactors = T ) }) tabsnames <- reactive({ names(filereact()) }) output$tabnamesui <- renderUI({ req(userfile()) selectInput( 'tabnamesui', h5('Tab names'), choices = as.list(tabsnames()), selected="",multiple = FALSE ) }) tabnamesinput <- reactive({ input$tabnamesui}) #Append selected tab logic observeEvent(input$append,{ appendTab(inputId = "tabs", tabPanel(input$tabnamesui, sidebarPanel( actionButton(paste0("remove_", input$tabnamesui), "Delete")), mainPanel( #uiOutput("tabsets") #This is where I think something is broken DTOutput(paste0("table",input$tabnamesui)), plotOutput(paste0("plot",input$tabnamesui)) ) ) ) }) # Delete selected tab logic observeEvent(lapply(grep(pattern = "^remove_", x = names(input), value = TRUE), function(x){input[[x]]}),{ if(input$tabs != "Home"){ if (input[[paste0("remove_",input$tabs)]]) { ## remove tab only if delete button has been clicked removeTab(inputId = "tabs", target = input$tabs) updateSelectInput(session, "tabnamesui", selected = input$tabnamesui) # keep the selection when re-rendering sidebarPanel } } }) #New tab logic to prevent inserting same tab twice with enable/disable action button forcecombine = function(idtab,checker) { colnames(idtab) = colnames(checker) rbind(idtab,checker) } checker<-as.data.frame("checker") idtab<-as.data.frame("checkers") #only allow tab entry once observeEvent(input$append, { idtab <- paste0(tabnamesinput()) idtab<-as.data.frame(idtab) checkerx<-forcecombine(idtab,checker) repeated<-length(grep(idtab,checkerx)) if(repeated==1) { shinyjs::disable("append") } else {shinyjs::enable("append") } }) observeEvent(input$tabnamesui, { shinyjs::enable("append") output[[paste0("plot",input$tabnamesui)]] <- renderPlot(plot(cars)) lapply(tabnamesinput(), function(x) { df <- as.data.table(filereact()[[as.name(tabnamesinput())]]) output[[paste0('table',x)]] <- renderDT({ df #subsetdata()[[x]] })}) }) shinyjs::disable("append") observeEvent(input$file, { shinyjs::enable("append") }) } shinyApp(ui, server)


[![output][1]][1]

[1]: https://i.stack.imgur.com/V2wMj.png



        
Present in both answers; Present only in the new answer; Present only in the old answer;