R闪亮的conditionalPanel输出值

时间:2014-02-06 17:07:48

标签: r shiny

在R闪亮中有很多关于conditionalPanel的问题,但我仍然不明白如何使用server.R为conditionalPanel创建的值。这是我想要做的:我有一个像http://some-url.com/php/session_check.php?sid=session_id这样的网址。当session_id以0开头时,与http://some-url.com/php/session_check.php?sid=00221245一样,返回带有用户名的字符串(例如'testuser')。当session_id以除0之外的任何其他数字开头时,如http://some-url.com/php/session_check.php?sid=10221245,则返回0。现在我想隐藏一个面板,具体取决于是返回0还是用户名。因此我尝试做这样的事情:

conditionalPanel(
 condition="output.disable_ui!=0"

我知道这是错误的,但我并不真正理解condition参数如何适用于outputs,因为如果我为任何{{1}执行此操作,它将会起作用来自input

以下是我的示例代码:

server.R

ui.R

ui.R

library(shiny)
library(raster)
library(rgdal)

shinyServer(function(input, output, clientData) {

  output$disable_ui<-reactive({
    query<-parseQueryString(clientData$url_search)
    url_path<-paste(sep="","http://some-url.com/php/session_check.php?sid=",query, collapse="")
    read.table(url_path)
  })

  data <- reactive({  
    inFile <- input$example_layer 

    if (is.null(inFile)) 
      return(NULL)
    raster.file<- raster(inFile$datapath) 
  })

  output$raster.plot <- renderPrint({
    "Nothing to see here"
  })
})

3 个答案:

答案 0 :(得分:12)

@Julien Navarre是对的:必须渲染输出。除非您将其选项suspendWhenHidden设置为FALSE

  output$disable_ui<-reactive({
    query<-parseQueryString(clientData$url_search)
    url_path<-paste(sep="","http://some-url.com/php/session_check.php?sid=",query, collapse="")
    read.table(url_path)
  })
  outputOptions(output, 'disable_ui', suspendWhenHidden=FALSE)

答案 1 :(得分:11)

我认为如果你想在output的条件下使用它,必须在Ui中呈现conditionalPanel

以您为例,条件面板的HTML将如下所示:

<div data-display-if="output.disable_ui!=0">

如果页面中没有元素(在服务器端创建为输出)的id为“disable_ui”,则条件“output.disable_ui!= 0”始终为TRUE,并且条件面板始终显示。

一个简单的例子:

shiny::runApp(list( 
  ui = pageWithSidebar(

    headerPanel("test"),

    sidebarPanel(
      selectInput(
        "var", "Var",
        0:9)),

    mainPanel(
      verbatimTextOutput("id"),
      conditionalPanel(
        condition="output.id!=0",
        h4('Visible')
      )
    )
  ),
  server = function(input, output) {

    output$id<-reactive({input$var})

  }
))

如果您选择的数字不同为0,则会显示条件面板。 现在,注释行verbatimTextOutput("id"),,页面中没有更多带有id“id”的元素,然后条件面板<div data-display-if="output.id!=0">的条件不能为FALSE。

答案 2 :(得分:2)

这是对这个问题的真正答案: 在您的服务器功能内使用此功能:

outputOptions(output, "outputId", suspendWhenHidden = FALSE)

然后,您将可以在conditionalPanel中使用output.item

从这里回答: https://github.com/daattali/advanced-shiny/blob/master/server-to-ui-variable/app.R

在这里: https://github.com/rstudio/shiny/issues/1318