Shiny: Показать кнопки только после того, как файл был загружен
Я экспериментирую с Shiny, и мне это нравится. Я построил небольшое приложение, в котором студенты загружают CSV-файл, затем выбирают зависимые переменные и независимые переменные, а затем R вычисляет линейную регрессию. Работает нормально. Я загрузил его по адресу:
http://carlosq.shinyapps.io/Regresion
[Ты можешь использоватьэтот файл чтобы проверить это, если хотите. "beer" является зависимой переменной, а остальные переменные, кроме "id", являются независимыми.]
Вот сервер.R:
# server.R
library(shiny)
shinyServer(function(input, output) {
filedata <- reactive({
infile <- input$file1
if (is.null(infile)){
return(NULL)
}
read.csv(infile$datapath)
})
output$dependent <- renderUI({
df <- filedata()
if (is.null(df)) return(NULL)
items=names(df)
names(items)=items
selectInput("dependent","Select ONE variable as dependent variable from:",items)
})
output$independents <- renderUI({
df <- filedata()
if (is.null(df)) return(NULL)
items=names(df)
names(items)=items
selectInput("independents","Select ONE or MANY independent variables from:",items,multiple=TRUE)
})
output$contents <- renderPrint({
input$action
isolate({
df <- filedata()
if (is.null(df)) return(NULL)
fmla <- as.formula(paste(input$dependent," ~ ",paste(input$independents,collapse="+")))
summary(lm(fmla,data=df))
})
})
})
А вот и UI.R:
# ui.R
library(shiny)
shinyUI(fluidPage(
titlePanel("Multiple Linear Regression"),
sidebarLayout(
sidebarPanel(
fileInput('file1', 'Choose CSV File',
accept=c('text/csv',
'text/comma-separated-values,text/plain',
'.csv')),
tags$hr(),
uiOutput("dependent"),
uiOutput("independents"),
tags$hr(),
actionButton("action", "Press after reading file and selecting variables")
),
mainPanel(
verbatimTextOutput('contents')
)
)
))
У меня такой вопрос: я хочу, чтобы появление кнопки «После прочтения файла и выбора переменных» зависело от успешной загрузки.
Я попытался использовать предложение, содержащееся здесь:
Сделать так, чтобы conditionalPanel зависел от файлов, загруженных с помощью fileInput
Но я просто не могу заставить это работать.
Я ценю любую помощь.