...Hello, I am starting in the programming r and driving shiny and would like help in my code.
I am handling reactive objects but for each part of actions I have to create a reactive object that updates the dataset data according to where it passes.
I would like to know if you can handle only one reactive file and update only in that one and not use more reactive files.
I leave my code of what I have done
UI
library(tidyverse)
library(shiny)
library(DT)
library(shiny)
a <- iris
ui <- fluidPage(
tabPanel(strong("Tabla"),
sidebarLayout(
sidebarPanel(
uiOutput("uiSeleccion"),
downloadButton("desData1", "Guardar"),
hr(),
),
mainPanel(
dataTableOutput("tabla1")
)#mainPanel
)#sidebarLayout
),
tabPanel(strong("Tabla"),
sidebarLayout(
sidebarPanel(
uiOutput("uimodMinimo"),
hr(),
),#sidebarPanel
mainPanel(
br(),
dataTableOutput("tablaMinimo")
)#mainPanel
)#sidebarLayout
),#tabPanel
tabPanel(strong("Tabla"),
sidebarLayout(
sidebarPanel(
uiOutput("uimodMediana"),
hr(),
),#sidebarPanel
mainPanel(
br(),
dataTableOutput("tablaMediana")
)#mainPanel
)#sidebarLayout
),#tabPanel
)
SERVER
server <- function(input, output, session) {
output$uiSeleccion <- renderUI({
# conditionalPanel(
# condition = 'input.dataset === "Tabla"',
checkboxGroupInput("variables", "Columnas del dataset para mostrar:",
names(a), selected = names(a))
# )
})
####------------ render archivo de seleccion
archivo2 <- reactive({
a[ ,input$variables, drop = F ]
})
####------------ render tabla de seleccion
output$tabla1 <- renderDataTable({
DT::datatable(archivo2())
})
####---------------render decargar
output$desData1 <- downloadHandler(
filename = function() {
paste("Data", ".csv", sep = "")
},
content = function(file) {
write.csv(archivo2(), file, row.names = FALSE)
}
)
###############################MINIMO---------------------------
output$uimodMinimo <- renderUI({
selectInput("selecMin", "Selección de columna",
names(archivo2()), multiple = F)
})
####------------ render CAMBIAR NAS POR MINIMO
archivo4 <- reactive({
columnaNum <- input$selecMin
cambioNum <- min(archivo2()[,input$selecMin], na.rm=TRUE)
if (is.null(columnaNum)) {
return(NULL)
}
else{archivo2() %>%
mutate(!!sym(columnaNum) := `[<-`(!!sym(columnaNum), replace_na(archivo2()[,columnaNum], cambioNum)))
}
})
####------------ render TABLA REMPLAZO
output$tablaMinimo <- renderDataTable({
archivo4()
})
########################Mediana-------------------------
output$uimodMediana <- renderUI({
selectInput("selecMediana", "Selección de columna",
names(archivo4()), multiple = F)
})
####------------ render CAMBIAR NAS POR SUMMARY
archivo5 <- reactive({
columnaNum <- input$selecMediana
cambioNum <- median(archivo4()[,input$selecMediana], na.rm=TRUE)
if (is.null(columnaNum)) {
return(NULL)
}
else{
archivo4() %>%
mutate(!!sym(columnaNum) := `[<-`(!!sym(columnaNum), replace_na(archivo4()[,columnaNum], cambioNum)))
}
})
####------------ render TABLA REMPLAZO
output$tablaMediana <- renderDataTable({
if (is.null(archivo5())) {
return(NULL)
}
archivo5()
})
}