Shiny is not working when use two tabPanel

Friends, could you help me display my table and graph in shiny. The executable code is below. I divided it into two tabPanel ("General Solution" and "Route and distance"). When I do just one, the figure and table are shown, but when I used the second tabPanel, neither is shown.I don't know if I used "," or ")" the most. I did several tests but I still couldn't show my table and figure. Sorry, it may be something simple, but I didn't get it.

Would you help me??

Thank you friends.

library(shiny)
library(ggplot2)
library(rdist)
library(geosphere)
library(kableExtra)
library(readxl)
library(tidyverse)
library(DT)

#database
df<-structure(list(Properties = c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35), Latitude = c(-23.8, -23.8, -23.9, -23.9, -23.9,  -23.9, -23.9, -23.9, -23.9, -23.9, -23.9, -23.9, -23.9, -23.9, 
                                                                                                                                                 + -23.9, -23.9, -23.9, -23.9, -23.9,-23.9,-23.9,-23.9,-23.9,-23.9,-23.9,-23.9,-23.9,-23.9,-23.9,-23.9,-23.9,-23.9,-23.9,-23.9,-23.9), Longitude = c(-49.6, -49.6, -49.6, -49.6, -49.6, -49.6, -49.6, -49.6, -49.6, -49.6, -49.7, 
                                                                                                                                                                                                                                                                                                     + -49.7, -49.7, -49.7, -49.7, -49.6, -49.6, -49.6, -49.6,-49.6,-49.6,-49.6,-49.6,-49.6,-49.6,-49.6,-49.6,-49.6,-49.6,-49.6,-49.6,-49.6,-49.6,-49.6,-49.6), Waste = c(526, 350, 526, 469, 285, 175, 175, 350, 350, 175, 350, 175, 175, 364, 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          + 175, 175, 350, 45.5, 54.6,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350)), class = "data.frame", row.names = c(NA, -35L))

function.clustering<-function(df,k,Filter1,Filter2){

    if (Filter1==2){
        Q1<-matrix(quantile(df$Waste, probs = 0.25)) 
        Q3<-matrix(quantile(df$Waste, probs = 0.75))
        L<-Q1-1.5*(Q3-Q1)
        S<-Q3+1.5*(Q3-Q1)
        df_1<-subset(df,Waste>L[1]) 
        df<-subset(df_1,Waste<S[1])
    }

    #cluster
    coordinates<-df[c("Latitude","Longitude")]
    d<-as.dist(distm(coordinates[,2:1]))
    fit.average<-hclust(d,method="average") 


    #Number of clusters
    clusters<-cutree(fit.average, k) 
    nclusters<-matrix(table(clusters))  
    df$cluster <- clusters 

    #Localization
    center_mass<-matrix(nrow=k,ncol=2)
    for(i in 1:k){
        center_mass[i,]<-c(weighted.mean(subset(df,cluster==i)$Latitude,subset(df,cluster==i)$Waste),
                           weighted.mean(subset(df,cluster==i)$Longitude,subset(df,cluster==i)$Waste))}
    coordinates$cluster<-clusters 
    center_mass<-cbind(center_mass,matrix(c(1:k),ncol=1)) 

    #Coverage
    coverage<-matrix(nrow=k,ncol=1)
    for(i in 1:k){
        aux_dist<-distm(rbind(subset(coordinates,cluster==i),center_mass[i,])[,2:1])
        coverage[i,]<-max(aux_dist[nclusters[i,1]+1,])}
    coverage<-cbind(coverage,matrix(c(1:k),ncol=1))
    colnames(coverage)<-c("Coverage_meters","cluster")

    #Sum of Waste from clusters
    sum_waste<-matrix(nrow=k,ncol=1)
    for(i in 1:k){
        sum_waste[i,]<-sum(subset(df,cluster==i)["Waste"])
    }
    sum_waste<-cbind(sum_waste,matrix(c(1:k),ncol=1))
    colnames(sum_waste)<-c("Potential_Waste_m3","cluster")

    #Output table
    data_table <- Reduce(merge, list(df, coverage, sum_waste))
    data_table <- data_table[order(data_table$cluster, as.numeric(data_table$Properties)),]
    data_table_1 <- aggregate(. ~ cluster + Coverage_meters + Potential_Waste_m3, data_table[,c(1,7,6,2)], toString)

    #Scatter Plot
    suppressPackageStartupMessages(library(ggplot2))
    df1<-as.data.frame(center_mass)
    colnames(df1) <-c("Latitude", "Longitude", "cluster")
    g<-ggplot(data=df,  aes(x=Longitude, y=Latitude,  color=factor(clusters))) + geom_point(aes(x=Longitude, y=Latitude), size = 4)
    Centro_View<- g +  geom_text(data=df, mapping=aes(x=eval(Longitude), y=eval(Latitude), label=Waste), size=3, hjust=-0.1)+ geom_point(data=df1, mapping=aes(Longitude, Latitude), color= "green", size=4) + geom_text(data=df1, mapping = aes(x=Longitude, y=Latitude, label = 1:k), color = "black", size = 4)
    plotGD<-print(Centro_View + ggtitle("Scatter Plot") + theme(plot.title = element_text(hjust = 0.5)))

    return(list(
        "Data" = data_table_1,
        "Plot" = plotGD,
        "Coverage" = coverage
    ))
}

ui <- bootstrapPage(
    navbarPage(theme = shinytheme("flatly"), collapsible = TRUE,
               "Clustering", 

               tabPanel("General Solution",

                        sidebarLayout(
                            sidebarPanel(
                                radioButtons("filtro1", h3("Select properties"),
                                             choices = list("All properties" = 1, 
                                                            "Exclude properties" = 2),
                                             selected = 1),

                                radioButtons("filtro2", h3("Coverage"),
                                             choices = list("Limite coverage" = 1, 
                                                            "No limite coverage" = 2
                                             ),selected = 1),
                                radioButtons("gasoduto", h3("Preference for the location"),
                                             choices = list("big production" = 1, 
                                                            "small production"= 2
                                             ),selected = 1),

                                tags$hr(),
                                tags$b(h3("Satisfied?")),
                                radioButtons("satisfaction","", choices = list("Yes" = 1,"No " = 2),selected = 1),
                                tags$b(h5("(a) Choose other filters")),
                                tags$b(h5("(b) Choose clusters")),  
                                sliderInput("Slider", h5(""),
                                            min = 2, max = 8, value = 5),
                                tags$hr(),
                                actionButton("reset", "Clean")
                            ),

                            mainPanel(
                                tabsetPanel(      
                                    tabPanel("Clusters", plotOutput("ScatterPlot")),
                                    tabPanel("Solution", DTOutput("tabela"))))

                        )),

tabPanel("Route and distance",
          sidebarLayout(
           sidebarPanel(
             radioButtons("distance", h3("Selection distance"),
                         choices = list("All distance" = 1,
                                         "Exclude distance" = 2),
                          selected = 1)
           ),
           mainPanel(
             tabsetPanel(
               tabPanel("Route", plotOutput("ScatterPlot")),
               tabPanel("Distance", DTOutput("tabela"))))
           ))))

server <- function(input, output) {

    f1<-renderText({input$filter1})
    f2<-renderText({input$filter2})


    Modelclustering<-reactive(function.clustering(df,input$Slider,1,1))


    output$tabela <- renderDataTable({
        data_table_1 <- req(Modelclustering())[[1]]
        x <- datatable(data_table_1[order(data_table_1$cluster), c(1, 4, 2, 3)],
                       options = list(
                           paging =TRUE,
                           pageLength =  5
                       )
        )
        return(x)
    })


    output$ScatterPlot <- renderPlot({
        Modelclustering()[[2]]
    })

}

shinyApp(ui = ui, server = server)

This topic was automatically closed 54 days after the last reply. New replies are no longer allowed.