通过文件输入重置 Shiny 应用程序(当用户浏览新数据时)
Reseting Shiny app via fileInput (when the user browses new data)
我正在开发一个需要用户输入数据的应用程序。一旦用户单击“浏览”按钮上传新数据,我需要应用程序重置所有内容(我认为要求用户通过单独的按钮重置所有内容然后浏览新数据是一种不好的做法!)。我希望这段代码可以工作,但没有! “浏览”按钮不会删除任何内容!
library(shiny)
x = 0.1
y = 0.1
df = data.frame(x,y) #Just define a simple dataset
ui <- shinyUI(fluidPage(
fileInput('datafile', 'Select your data CSV file',
accept=c('csv', 'comma-separated-values','.csv')),
tableOutput('table'),
))
server <- shinyServer(function(input, output, session) {
output$table = renderTable({
df
})
#
observeEvent(input$datafile, {
output$table = NULL #This one didn't work
df = NULL #This one didn't work as well
})
})
shiny::shinyApp(ui, server)
这只是一个最小的示例代码。有人可以帮助我通过“浏览”按钮删除之前输入的变量,以便应用程序在新数据进入时保持新鲜吗?
df
应该是反应式的,以便根据 UI 输入进行修改。
您可以使用浏览新文件后更新的 reactiveVal
:
library(shiny)
x = 0.1
y = 0.1
ui <- shinyUI(fluidPage(
fileInput('datafile', 'Select your data CSV file',
accept=c('csv', 'comma-separated-values','.csv')),
tableOutput('table'),
))
server <- shinyServer(function(input, output, session) {
df <- reactiveVal(data.frame(x,y))
observe({
file <- input$datafile
ext <- tools::file_ext(file$datapath)
req(file)
validate(need(ext == "csv", "Please upload a csv file"))
df(read.csv(file$datapath, header = T))
})
output$table = renderTable({
df()
})
})
问题已使用 reactiveVal() 解决。这才是我真正想看到的:
library(shiny)
ui <- shinyUI(fluidPage(
fileInput('datafile', 'Select your data CSV file',
accept=c('csv', 'comma-separated-values','.csv')),
textInput("txt", "Enter the text to display below:"),
verbatimTextOutput("default"),
tableOutput('table'), #This is just to check whether the variable will be deleted
))
server <- shinyServer(function(input, output, session) {
X <- reactiveVal(c(1,3))
Y <- reactiveVal(NULL)
observe({
Y(input$txt)
})
output$default <- renderText({Y() })
output$table = renderTable({ #This is just to check whether the variable will be deleted
X()
})
observeEvent(input$datafile,{
Y(NULL)
X(NULL)
})
})
shiny::shinyApp(ui, server)
“浏览”按钮用作操作按钮以重置单击按钮之前定义的所有内容。
我正在开发一个需要用户输入数据的应用程序。一旦用户单击“浏览”按钮上传新数据,我需要应用程序重置所有内容(我认为要求用户通过单独的按钮重置所有内容然后浏览新数据是一种不好的做法!)。我希望这段代码可以工作,但没有! “浏览”按钮不会删除任何内容!
library(shiny)
x = 0.1
y = 0.1
df = data.frame(x,y) #Just define a simple dataset
ui <- shinyUI(fluidPage(
fileInput('datafile', 'Select your data CSV file',
accept=c('csv', 'comma-separated-values','.csv')),
tableOutput('table'),
))
server <- shinyServer(function(input, output, session) {
output$table = renderTable({
df
})
#
observeEvent(input$datafile, {
output$table = NULL #This one didn't work
df = NULL #This one didn't work as well
})
})
shiny::shinyApp(ui, server)
这只是一个最小的示例代码。有人可以帮助我通过“浏览”按钮删除之前输入的变量,以便应用程序在新数据进入时保持新鲜吗?
df
应该是反应式的,以便根据 UI 输入进行修改。
您可以使用浏览新文件后更新的 reactiveVal
:
library(shiny)
x = 0.1
y = 0.1
ui <- shinyUI(fluidPage(
fileInput('datafile', 'Select your data CSV file',
accept=c('csv', 'comma-separated-values','.csv')),
tableOutput('table'),
))
server <- shinyServer(function(input, output, session) {
df <- reactiveVal(data.frame(x,y))
observe({
file <- input$datafile
ext <- tools::file_ext(file$datapath)
req(file)
validate(need(ext == "csv", "Please upload a csv file"))
df(read.csv(file$datapath, header = T))
})
output$table = renderTable({
df()
})
})
问题已使用 reactiveVal() 解决。这才是我真正想看到的:
library(shiny)
ui <- shinyUI(fluidPage(
fileInput('datafile', 'Select your data CSV file',
accept=c('csv', 'comma-separated-values','.csv')),
textInput("txt", "Enter the text to display below:"),
verbatimTextOutput("default"),
tableOutput('table'), #This is just to check whether the variable will be deleted
))
server <- shinyServer(function(input, output, session) {
X <- reactiveVal(c(1,3))
Y <- reactiveVal(NULL)
observe({
Y(input$txt)
})
output$default <- renderText({Y() })
output$table = renderTable({ #This is just to check whether the variable will be deleted
X()
})
observeEvent(input$datafile,{
Y(NULL)
X(NULL)
})
})
shiny::shinyApp(ui, server)
“浏览”按钮用作操作按钮以重置单击按钮之前定义的所有内容。