有光泽:将reactiveValues传递给conditionalPanel

Pat*_*ckT 11 javascript r shiny

我可以将reactiveValues传递给conditionalPanel的条件吗?如果是这样,怎么样?

这是我在conditionalPanel ui.R中尝试过的:

conditionalPanel(condition = "values.cond == 0", etc.
Run Code Online (Sandbox Code Playgroud)

我values$cond在server.R中定义的地方:

values <- reactiveValues(cond = 0)
Run Code Online (Sandbox Code Playgroud)

我也尝试过替代方案"values.cond == true",但没有成功.

library("shiny")
runGist("https://gist.github.com/anonymous/8281021")
Run Code Online (Sandbox Code Playgroud)

看代码:

https://gist.github.com/anonymous/8281021

Mar*_*ann 10

正如@jdharrison指出的那样,你有问题,你values在服务器端有反应或任何其他数据,条件面板是JS条件+客户端的一些HTML.因此,如果要根据在服务器端计算的某些值动态更新JS条件,则需要将数据从服务器获取到客户端.我认为你可以做的是使用一个仍然没有文档的闪亮功能来将自定义数据从服务器传递到客户端.我写了一篇关于如何做到这一点的博客文章:http://ryouready.wordpress.com/2013/11/20/sending-data-from-client-to-server-and-back-using-shiny/

我想你可以使用这种方法动态更新JS面板条件.您需要编写一个JS函数,在传递数据后执行此操作.所以这归结为用你想要的值替换输出的data-display-if属性conditionalPanel.

另一个想法:如果您的UI强烈依赖于服务器端的计算,您可能需要考虑动态创建(侧边栏)内容renderUI.

编辑:顺便说一句,这就是@jdharrison在他的第二条评论中提到的.


tak*_*kje 7

您也可以通过渲染文本来实现。

用户界面:

shinyUI(
  fluidPage(
    # Application title
    titlePanel("Test"),

    sidebarLayout(
      sidebarPanel(
        actionButton("ShowCond", "Show Conditional Panel"),
        conditionalPanel(
          condition = "output.test=='5'",
          actionButton("CheckFile", "Check file")
        )
      ),
      mainPanel(
        verbatimTextOutput("test")
      )
    )
  )
)
Run Code Online (Sandbox Code Playgroud)

服务器:

shinyServer(function(input, output, session) {
  var <- eventReactive(input$ShowCond, {
    5
  })

  output$test <- renderText({
    var()
  })
})
Run Code Online (Sandbox Code Playgroud)

问题在于,如果没有 verbatimTextOutput,它就无法工作。您需要将它包含在 UI 端的某个位置。但是,您可以将其作为消息重用。

编辑:

没有逐字文本也是可能的。默认情况下,Shiny 会在未显示时暂停所有输出。但是,这可以通过为特定输出变量设置以下选项来更改:

outputOptions(output, "test", suspendWhenHidden=FALSE)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,不再需要使用逐字文本(和相应的渲染文本)。

资料来源:https : //shinydata.wordpress.com/2015/02/02/a-few-things-i-learned-about-shiny-and-reactive-programming/#use-of-isolate-to-prevent-accidental -依赖