在 shiny app 之外调用 reactive function()

Call reactive function() outside the shiny app

我创建了以下 reprex,它试图在闪亮的应用程序之外使用反应函数 price()。如果我使用 df<-5 则代码有效,但是当我使用 df<- price() 时代码无效。我有一个巨大的闪亮应用程序,我想在闪亮的应用程序之外 source() 一个巨大的脚本,但它需要一些来自反应函数的输入值。

 library(shiny)
    df<-price()
ui <- fluidPage(
    numericInput("price", "Price", value=1, min=1 , max=10)
    ,textOutput("text")
)

server <- function(input, output, session) {
    price <- reactive({as.numeric(input$price)})
    output$text<- renderText(df)
}

shinyApp(ui, server)

我不想在应用程序内部调用脚本,因为我将不得不在每种输出中一次又一次地调用它,并且该脚本是一个模拟,这意味着它会在每次调用时更改值。我只想调用它一次,以便值保持不变,我可以输出它们。


正在尝试使用 gdevaux 的建议。当我尝试在变量中输入函数的值时,它似乎不起作用。它说'myfunction(argument1)中的错误:找不到对象'argument1' '.

library(shiny)

# in script.R
myfunction <- function(argument1){
    return(as.numeric(argument1))
}
f<-myfunction(argument1)  #Trying to put output values in a variable

# in app.R
#source("script.R")
ui <- fluidPage(
    numericInput("price", "Price", value=1, min=1 , max=10)
    ,textOutput("text")
)

server <- function(input, output, session) {
    price <- reactive(myfunction(argument1 = input$price))
    output$text<- renderText(price())
}

shinyApp(ui, server)

您不能在服务器(或 ui)中定义一个函数然后在外部使用它,也不能在闪亮的应用程序外部调用输入值。您可以做的是在服务器外部(例如在另一个文件中)编写您的函数,获取它,并将您的输入或反应作为参数传递给这些函数

library(shiny)

# in script.R
myfunction <- function(argument1){
  return(as.numeric(argument1))
}

# in app.R
#source("script.R")
ui <- fluidPage(
  numericInput("price", "Price", value=1, min=1 , max=10)
  ,textOutput("text")
)

server <- function(input, output, session) {
  price <- reactive(myfunction(argument1 = input$price))
  output$text<- renderText(price())
}

shinyApp(ui, server)