首页 > 解决方案 > R+shiny:从非反应函数中读取输入变量

问题描述

我有以下代码:

library(shiny)

foo <- function(a, b){
  a*b*input$ni
}

ui <- fluidPage(
  numericInput("ni", label = "in", value = 3),
  verbatimTextOutput("out")
)

server <- function(input, output, session) {
  output$out <- renderText(foo(a = 2, b = 4))
}

shinyApp(ui = ui, server = server)

运行它会导致错误object 'input' not found。该foo函数不知道闪亮的输入,因为它是在闪亮的函数之外编写的,它不是一个反应函数。

我怎样才能让它工作?由于我的代码是如何构建的(在这个 MWE 之外),我需要该函数foo只接受参数a,而不接受b其他参数。也就是说,输入不能作为参数传递给它。它还需要位于服务器功能之外。

有没有办法让它以某种方式从闪亮的环境中获取输入变量?

标签: rshiny

解决方案


如果您无法更改函数参数,则可以使用全局赋值运算符 ( <<-),以便该变量在函数范围之外可用。

library(shiny)

foo <- function(a, b){
  a*b*ni
}

ui <- fluidPage(
  numericInput("ni", label = "in", value = 3),
  verbatimTextOutput("out")
)

server <- function(input, output, session) {
  
  output$out <- renderText({
    ni <<- input$ni
    foo(a = 2, b = 4)
  })
}

shinyApp(ui = ui, server = server)

在此处输入图像描述


推荐阅读