Entschuldigung, ich bin neu für Shiny. Ich habe kürzlich versucht, das reaktive Programm zu verwenden, um ein Projekt zu beenden. Aber jetzt habe ich ein Problem, das nicht in der Lage ist herauszufinden, warum das passiert.reaktiver Ausdruck Ergebnis unterschiedlich
Zuerst erstelle ich einen reaktiven Ausdruck, der alle Dateien in einem Ordner auflistet.
fullFilenames <- reactive({list.files(workDir, pattern="*.csv.gz", full.names=TRUE)})
Dann beobachte ich eine Schaltfläche Ereignis auszulösen, die Dateien in dem Ordner erneut scannen und die updateCheckboxGroupInput
zu aktualisieren.
Ich legte einen Haltepunkt bei "print("File Scaned")"
.
Wenn wir die App starten, zeigt die Checkbox-Gruppe alle Dateien unter dem Ordner korrekt an.
Dann entfernen/füge ich Dateien unter Arbeitsordner, dann klicken Sie auf Neu scannen. Aber die Checkbox-Gruppe wird nicht aktualisiert.
Wenn das Programm am Haltepunkt angehalten wurde, habe ich den Wert "fullFilenames" und "fullFilenames()" überprüft und festgestellt, dass fullFilenames aktualisiert wurde, aber nicht fullFilenames(). Ich versuche die Logik hinter zwei Werten zu verstehen und finde einen Weg, um die Checkbox-Gruppe richtig zu aktualisieren.
Können Sie bitte etwas Hilfe zu diesem Thema geben?
Vielen Dank.
Siehe unten Code:
library(shiny)
library(shinydashboard)
workDir<-c("c:/files")
setwd(workDir)
ui <- dashboardPage(
dashboardHeader(title = "Test Tool"),
dashboardSidebar(
sidebarMenu(
menuItem("Setup", tabName = "setup", icon = icon("cogs"))
)
),
dashboardBody(
tabItem(tabName = "setup",
fluidRow(
box(width = 12,
h1("Setup before generate dashboard"),
p(class = "text-muted",
br(),
"Default all files under working directory been selected, you also can choice your desired files.",
br(),
br()
),
fluidRow(
column(12, align="center",
actionButton("rescanFilesBtn","Rescan CSV Files")
)
)
)
),
fluidRow(
column(width = 12,
box(width = NULL, style = "max-height: 500px", status = "info", solidHeader = TRUE,
title = "Change raw CSV files as you like",
textInput("csvFileFilter","Desired CSV Files", placeholder = "File names, separate by semicolon"),
checkboxGroupInput("selectedFiles", "",
choiceValues = NULL,
choiceNames= NULL,
selected = NULL
)
)
)
)
)
)
)
server <- function(input, output, session) {
fullFilenames <- reactive({list.files(workDir, pattern="*.csv.gz", full.names=TRUE)})
observeEvent(input$rescanFilesBtn, {
print("Scan Files")
fullFilenames <- list.files(workDir, pattern="*.csv.gz", full.names=TRUE)
updateCheckboxGroupInput(session, "selectedFiles", choices = fullFilenames)
print("File Scaned")
})
}
shinyApp(ui, server)
Können Sie ein reproduzierbares Beispiel angeben? – SBista
@SBista, aktualisiert. Vielen Dank. –