Может ли shiny использовать интерактивный пользовательский интерфейс?

#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.