【发布时间】:2017-05-29 21:19:35
【问题描述】:
抱歉,我是 Shiny 的新手。我最近尝试使用响应式程序来完成一个项目。但现在我面临一个无法弄清楚为什么会发生这种情况的问题。
首先,我创建了一个反应式表达式,它列出了一个文件夹中的所有文件。
fullFilenames <- reactive({list.files(workDir, pattern="*.csv.gz", full.names=TRUE)})
然后,我观察到一个按钮事件来触发重新扫描文件夹中的文件并更新updateCheckboxGroupInput。
我在"print("File Scaned")"设置了一个断点。
当我们启动应用程序时,复选框组正确显示文件夹下的所有文件。
然后我删除/添加工作文件夹下的文件,然后单击重新扫描按钮。但是复选框组没有得到更新。
当程序在断点处停止时,我检查了值“fullFilenames”和“fullFilenames()”,发现 fullFilenames 已更新,但 fullFilenames() 未更新。我试图了解两个值背后的逻辑是不同的,并找到一种方法如何以正确的方式更新复选框组。
您能否就这个问题提供一些帮助?
非常感谢。
参考以下代码:
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)
【问题讨论】:
-
你能提供一个可重现的例子吗?
-
@SBista,已更新。非常感谢。