我想知道是否有办法隐藏我的闪亮应用上的动作按钮,直到侧面板中显示变量选择。我一直无法通过按钮的uiOutput来实现这一点,因为它会混淆dataTable,因为它认为输入$ submit是一个空值。这是迄今为止的代码:
ui.R
library(shiny)
shinyUI(pageWithSidebar(
headerPanel("CSV Viewer"),
sidebarPanel(
fileInput('file1', 'CSV File',
accept=c('text/csv', 'text/comma-separated-values,text/plain', '.csv')),
tags$hr(),
checkboxInput('header', 'Header', TRUE),
radioButtons('sep', 'Separator',
c(Comma=',',
Semicolon=';',
Tab='\t'),
'Comma'),
uiOutput('varselect'),
actionButton('submit', 'Submit')
),
mainPanel(
dataTableOutput('contents')
)
))
server.R
library(shiny)
shinyServer(function(input, output, session) {
observe({
csvfile <- input$file1
if (is.null(csvfile))
{return(NULL)}
dt <- read.csv(csvfile$datapath, header=input$header, sep=input$sep, quote=input$quote)
output$varselect <- renderUI({
checkboxGroupInput("var", "Variables", choices = names(dt), select = names(dt))
})
if (input$submit > 0) {output$contents <- renderDataTable({
isolate(dt[ ,input$var])
})}
})
})
tl; dr我想阻止用户推送&#34;提交&#34;按钮,然后选择要上传的文件。事实证明这对我来说很难。
提前感谢您的所有帮助! :)
答案 0 :(得分:5)
您可以将actionButton
添加到renderUI
。我还整理了你的server.R
,因为所有内容都包含在observe
中,这可能不会是最好的。
library(shiny)
runApp(list(
ui = pageWithSidebar(
headerPanel("CSV Viewer"),
sidebarPanel(
fileInput('file1', 'CSV File',
accept=c('text/csv', 'text/comma-separated-values,text/plain', '.csv')),
tags$hr(),
checkboxInput('header', 'Header', TRUE),
radioButtons('sep', 'Separator',
c(Comma=',',
Semicolon=';',
Tab='\t'),
'Comma'),
uiOutput('varselect')
),
mainPanel(
dataTableOutput('contents')
)
)
,server = function(input, output, session) {
csvfile <- reactive({
csvfile <- input$file1
if (is.null(csvfile)){return(NULL)}
dt <- read.csv(csvfile$datapath, header=input$header, sep=input$sep, quote=input$quote)
dt
})
output$varselect <- renderUI({
if(is.null(input$file1$datapath)){return()}
list(
checkboxGroupInput("var", "Variables", choices = names(csvfile()), select = names(csvfile()))
, actionButton('submit', 'Submit')
)
})
output$contents <- renderDataTable({
if(is.null(input$file1$datapath)){return()}
if(input$submit > 0){
isolate(csvfile()[ ,input$var])
}
})
}
)
)