2015-10-08 3 views
0

Я пытаюсь использовать условную панель в Shiny на основе вывода, сгенерированного на моем сервере. R-код. Я не могу использовать ввод, потому что это не соответствует моим потребностям. я на основе моего кода на примере я нашел на следующем веб-сайте: http://rstudio.github.io/shiny/tutorial/#dynamic-uiShiny conditionalPanel - состояние не работает (состояние вывода)

код UI.R:

tabSubMenuSaveData <- 
    tabItem("subMenuSaveData",  
      conditionalPanel(
      condition = "output.test", 
       uiOutput(outputId = "ui_save_data") 
     ) 
) 

Server.R код:

dataset <- reactive({ 
    datasets()$datasetlist[[input$datasetSelector]] 
}) 

output$test <- reactive({ 
    print("Test") 
    nrow(dataset()) 
}) 

-> набор данных () предоставляет текущий выбранный набор данных в моем приложении Shiny.

Кажется, что мое приложение даже не попадает на выходную тестовую часть, потому что она не отображает мою печать. Он должен идти здесь всякий раз, когда я нажимаю на вкладку «Сохранить данные».

Если кто-то может предоставить мне решение или объяснить мне, почему мое приложение не попадает на выходную тестовую часть, я был бы очень благодарен.

ответ

0

output$test должно быть выходным и должно быть вызвано на стороне ui. У меня есть приложение, которое имеет дело с той же проблемой, и я что-то вроде этого:

# ui.R

... 
htmlOutput("check_cond"), 
conditionalPanel( 
    condition = "!output.check_cond", 
    ... 
) 

# server.R

output$check_cond <- renderUI({ 
    if(nrow(dataset()) > 0) return NULL 
    div('Choose a proper dataset!', align = 'center', style = 'color: red;') 
}) 
0

Я думаю, что эти документы являются очень устарели ... Я никогда не видел, чтобы вывод использовался таким образом, и я просто попробовал код с этой страницы, и он, похоже, не работает.

В качестве альтернативного решения вы можете использовать shinyjs, чтобы показать/скрыть панель, а не использовать conditionalPanel. Например (это непроверенный код):

# install.packages("shinyjs") 
library(shinyjs) 

# UI: 

... 
tabSubMenuSaveData <- 
    tabItem("subMenuSaveData", 
      div(id = "mydiv",  
      uiOutput(outputId = "ui_save_data") 
     ) 
) 
... 


# server: 

... 
dataset <- reactive({ 
    datasets()$datasetlist[[input$datasetSelector]] 
}) 

observe({ 
    toggle(id = "mydiv", condition = nrow(dataset()) > 0) 
}) 
... 
1

Не удалось найти рабочее решение, основанное на ответах ранее. Мой друг действительно помог мне найти рабочее решение. Ответ ниже:

код UI.R:

tabSubMenuSaveData <- 
    tabItem("subMenuSaveData", 
      conditionalPanel(
      condition = ("output.file_Uploaded > 0"), 
      uiOutput(outputId = "ui_save_data") 
     ) 
) 

Server.R код:

output$file_Uploaded <- reactive({ 
    return(!is.null(getData())) 
}) 

Поэтому в основном я использовал другую реактивную функцию, определенную ранее в моем коде. Тем не менее, спасибо за помощь!

Смежные вопросы