【问题标题】:Invoke function in shinyServer using reactive使用响应式调用 shinyServer 中的函数
【发布时间】:2015-09-03 08:48:15
【问题描述】:

我有一个闪亮的应用程序,它根据用户输入调用外部函数。此函数根据输入更新数据框,因此可用于渲染绘图。

getData 函数()

getData= function(inpName)
{
   // a piece of code based on inpName
}

shinyUI.R

library(shiny)
shinyUI(fluidPage(
  titlePanel("title"),
  sidebarLayout(
    sidebarPanel(
      textInput("name","Enter a name")),
    mainPanel())
))

shinyServer.R

library(shiny)
shinyServer(function(input,output)
  {
  getData=reactive({getData(input$name) })
})

无论我尝试什么,我似乎都无法让 shinyServer 调用该函数并更新一个 df。有人可以建议做错了什么吗?感谢任何帮助。

【问题讨论】:

    标签: r shiny shiny-server


    【解决方案1】:

    您不想在服务器函数中覆盖getData

    library(shiny)
    getData <- function(inpName) 
        if (inpName %in% names(mtcars)) mtcars[,inpName] else NULL
    
    shinyApp(
        shinyUI(fluidPage(
            titlePanel("title"),
            sidebarLayout(
                sidebarPanel(
                    textInput("name","Enter a name")),
                mainPanel(
                    verbatimTextOutput('tab')
                ))
        )),
        shinyServer(function(input, output, session) {
            ## The first way
            ## dat <- reactive({ getData(input$name) })
    
            ## The other way
            vals <- reactiveValues(dat=NULL)
            observeEvent(input$name, vals$dat <- getData(input$name))
    
            output$tab <- renderPrint({ summary(vals$dat) })
        })
    )
    

    【讨论】:

    • 这行得通!谢谢!原谅我的无知对 Shiny 来说还是个新手。正在做什么(getData)是根据用户名从 json 文件中提取数据,然后使用相关详细信息填充数据框(df)。因此,理想情况下,在 ShinyServer 中,当 dat
    • @mongofresher 这是因为反应器是函数,所以它们在被调用时会被评估(它们还有更多,但我没有深入研究闪亮的内部结构)。它们还有一些缓存机制,使它们足够聪明,可以避免在它们的依赖项都没有改变的情况下重新评估。这是如何实现的,我不知道。你在寻找不同的行为吗?因为如果您将数据存储在reactiveValues 中并从observer 中更新它是可能的
    • 有道理!但我只是希望 dat() 被评估。我不需要它显示任何东西。我试着把它放在另一个反应块中。不行!!!!!!!
    • @mongofresher 是的,你需要使用reactiveValues,我添加了一个示例
    • 哇!这变得更加复杂(对于新手)。我希望网上有更详尽的指南来理解反应式和反应式值()。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多