提交按钮很有用,但我没有找到一种优雅的方法来抑制初始页面加载时的输出。
例如,Shiny教程在加载时呈现输出 http://rstudio.github.com/shiny/tutorial/#more-widgets
如何确保在按下提交按钮之前不会调用被动功能?
以下是上面链接的示例的内联代码。
#ui.R
library(shiny)
# Define UI for dataset viewer application
shinyUI(pageWithSidebar(
# Application title.
headerPanel("More Widgets"),
# Sidebar with controls to select a dataset and specify the number
# of observations to view. The helpText function is also used to
# include clarifying text. Most notably, the inclusion of a
# submitButton defers the rendering of output until the user
# explicitly clicks the button (rather than doing it immediately
# when inputs change). This is useful if the computations required
# to render output are inordinately time-consuming.
sidebarPanel(
selectInput("dataset", "Choose a dataset:",
choices = c("rock", "pressure", "cars")),
numericInput("obs", "Number of observations to view:", 10),
helpText("Note: while the data view will show only the specified",
"number of observations, the summary will still be based",
"on the full dataset."),
submitButton("Update View")
),
# Show a summary of the dataset and an HTML table with the requested
# number of observations. Note the use of the h4 function to provide
# an additional header above each output section.
mainPanel(
h4("Summary"),
verbatimTextOutput("summary"),
h4("Observations"),
tableOutput("view")
)
))
#server.R
library(shiny)
library(datasets)
# Define server logic required to summarize and view the selected dataset
shinyServer(function(input, output) {
# Return the requested dataset
datasetInput <- reactive({
switch(input$dataset,
"rock" = rock,
"pressure" = pressure,
"cars" = cars)
})
# Generate a summary of the dataset
output$summary <- renderPrint({
dataset <- datasetInput()
summary(dataset)
})
# Show the first "n" observations
output$view <- renderTable({
head(datasetInput(), n = input$obs)
})
})
答案 0 :(得分:10)
一种方法是使用actionButton
(来自shiny-incubator包)和isolate
。 Here's一篇解释如何将两者结合使用的文章。这是一种比submitButton
本质上更灵活的方法,它有点过于笨拙且不够灵活。
答案 1 :(得分:3)
我对文本字段输入有同样的问题,我使用了非常糟糕的工作:
我将初始字段值设置为“please_type_stuff_here”。在server.R中,我使用了一个if子句来判断是否有东西要返回给ui:
if (input$data=="please_type_stuff_here") {
} else {
# Return the requested dataset
datasetInput <- reactive({
switch(input$dataset,
"rock" = rock,
"pressure" = pressure,
"cars" = cars)
})
# Generate a summary of the dataset
output$summary <- renderPrint({
dataset <- datasetInput()
summary(dataset)
})
# Show the first "n" observations
output$view <- renderTable({
head(datasetInput(), n = input$obs)
})
}