如何在shiny中从server.R传递变量到ui.R而不使用全局变量?

8

我尝试了各种方法在server.R中存储变量,并在ui.R中使用同一变量,但并不成功。(除了声明它为全局变量)有没有一种方法可以从server.R传递变量到ui.R?只要能用就行,即使是一个hacky的方式。


你想在ui.r中对它做什么?你尝试过使用renderUI()基于server.R中的变量创建输入,并将它们发送到ui.r吗? - Tonio Liebrand
我想传递一个字符串或整数到conditionalPanel中,以便我可以决定面板是否应该显示。(无论是否点击按钮) - tonybrown
2
啊,好的。你可以在服务器端使用类似这样的代码:output$serverInfo<- reactive({ TRUE });然后在UI端使用:conditionalPanel(condition="output.serverInfo!=0") - Tonio Liebrand
1个回答

12

这可能对您有用(直接从我的Shiny技巧列表中获取):

在UI的条件面板中使用来自服务器的变量

在UI中使用条件面板时,条件通常是使用输入值的表达式。但如果您想要使用包含更复杂条件的条件面板,且该条件不一定直接与输入字段相关呢?此示例演示了如何在服务器代码中定义一个输出变量,您可以在UI中使用它。另一种方法是使用shinyjs软件包中的show()和hide()函数。

library(shiny)

ui <- fluidPage(
  selectInput("num", "Choose a number", 1:10),
  conditionalPanel(
    condition = "output.square",
    "That's a perfect square!"
  )
)

server <- function(input, output, session) {
  output$square <- reactive({
    sqrt(as.numeric(input$num)) %% 1 == 0
  })
  outputOptions(output, 'square', suspendWhenHidden = FALSE)
}

shinyApp(ui = ui, server = server)

太棒了!有一个问题,suspendWhenHidden = FALSE 是否确保即使输出未在UI中呈现也会运行? - tonybrown
@DeanAttali:你有没有想过在ui.R中动态调用数据的方法?https://stackoverflow.com/questions/57093296/pass-the-read-data-in-server-r-into-ui-r-using-shiny - maniA
@tonybrown 是的.. "suspendWhenHidden。当为TRUE(默认值)时,输出对象将在Web页面上隐藏时暂停(不执行)。当为FALSE时,输出对象将不会在隐藏时暂停,如果它已经被隐藏和暂停,则会立即恢复" [https://rdrr.io/cran/shiny/man/outputOptions.html] - Rafs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接