#r #user-interface #shiny
#r #пользовательский интерфейс #shiny
Вопрос:
Я почти закончил свой проект и пытаюсь внести некоторые эстетические изменения в свое приложение, чтобы оно было более удобным и привлекательным для пользователя.
Идея: поскольку для работы моего приложения требуется загрузить таблицу, я подумал, что было бы лучше, если бы я поместил отдельную большую кнопку загрузки в середине экрана, а затем появилась бы панель навигации с результатами, графиками, загрузками.
Вот что я пробовал:
shinyUI(
fileInput("file","Upload the file")
if(!is.null(input$file)) {
navbarPage("My Application",
tabPanel("Data", tableOutput("table")),
tabPanel("Summary", tableOutput("sum")),
tabPanel("Regression", verbatimTextOutput("reg")),
tabPanel("Wavelet Coefficients", htmlOutput("tmod1"),
tableOutput("mod1"),
tableOutput("mod2")),
tabPanel("Wavelet Plot", plotOutput("plot")),
tabPanel("About file", tableOutput("filedf"))
)}
)
Ошибка заключается в следующем:
ERROR: D:OneDriveMODWT App/ui.R:7:1: unexpected 'if'
6:
7: if
^
Есть ли какое-либо решение для этого? :/
Мой текущий «план б» заключается в создании двух приложений, где первое — загружаемое, и если пользователь загружает файл, то сервер.R вызовет «оригинальное» приложение. Возможно ли это вообще?
Я прошу прощения, если этот вопрос кажется глупым, но я новичок в программировании, поэтому я не знаю об ограничениях.
Спасибо
Комментарии:
1. RStudio написала для вас статью: shiny.rstudio.com/articles/dynamic-ui.html
2. объект input reactive недоступен на стороне пользовательского интерфейса. Лучше просто вернуть пользовательский
htmlOutput('AnEntirePage')
интерфейс, а затем использовать renderUI для записи оператора if.
Ответ №1:
Для динамического добавления или удаления элементов пользовательского интерфейса в Shiny вы должны использовать встроенные функции динамического пользовательского интерфейса, такие как conditionalPanel
.
Вы переместите логику из своего if
утверждения в condition
аргумент conditionalPanel
.
Есть несколько других функций, подобных той, о которой вы можете прочитать здесь, и вы также можете использовать пользовательский JS.