R Shiny中是否存在全局变量?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R Shiny中是否存在全局变量?相关的知识,希望对你有一定的参考价值。

如何使用R Shiny声明全局变量,以便您不需要多次运行相同的代码片段?作为一个非常简单的例子,我有两个使用相同精确数据的图,但我只想计算数据ONCE。

这是ui.R文件:

library(shiny)

# Define UI for application that plots random distributions 
shinyUI(pageWithSidebar(

# Application title
headerPanel("Hello Shiny!"),

# Sidebar with a slider input for number of observations
sidebarPanel(
sliderInput("obs", 
            "Number of observations:", 
            min = 1,
            max = 1000, 
            value = 500)
  ),

# Show a plot of the generated distribution
 mainPanel(
   plotOutput("distPlot1"),
  plotOutput("distPlot2")
 )
))

这是server.R文件:

library(shiny)

shinyServer(function(input, output) {

  output$distPlot1 <- renderPlot({ 
    dist <- rnorm(input$obs)
    hist(dist)
  })

  output$distPlot2 <- renderPlot({ 
    dist <- rnorm(input$obs)
    plot(dist)
  })

})

请注意,output$distPlot1output$distPlot2都执行dist <- rnorm(input$obs),它重新运行相同的代码两次。如何使“dist”向量运行一次并使其可用于所有renderplot函数?我试图将dist放在函数之外:

library(shiny)

shinyServer(function(input, output) {

  dist <- rnorm(input$obs)

  output$distPlot1 <- renderPlot({ 
    hist(dist)
  })

  output$distPlot2 <- renderPlot({ 
    plot(dist)
  })

})

但我得到一个错误,说找不到“dist”对象。这是我真实代码中的一个玩具示例我有50行代码,我将其粘贴到多个“Render ...”函数中。有帮助吗?

哦,是的,如果你想运行这段代码,只需创建一个文件并运行它:library(shiny)getwd()runApp(“C:/ Desktop / R Projects / testShiny”)

其中“testShiny”是我的R工作室项目的名称。

答案

Shiny webpage上的这个页面解释了Shiny变量的范围。

全局变量可以放在server.R(根据里卡多的答案)或global.R中。

global.R中定义的对象与在shinyServer()外的server.R中定义的对象类似,但有一个重要区别:它们对ui.R中的代码也是可见的。这是因为它们被加载到R会话的全局环境中; Shiny应用程序中的所有R代码都在全局环境中运行或者是它的子代。

在实践中,有很多时候需要在server.R和ui.R之间共享变量。 ui.R中的代码运行一次,当Shiny应用程序启动时,它会生成一个html文件,该文件被缓存并发送到每个连接的Web浏览器。这可能对设置某些共享配置选项很有用。

另一答案

正如@nico在上面列出的链接中所提到的,您还可以在函数内部使用<< - 分类器来使变量在函数外部可访问。

foo <<- runif(10)

代替

foo <- runif(10)

链接说“如果对象发生变化,那么更改的对象将在每个用户会话中可见。但请注意,您需要使用<< - 赋值运算符来更改bigDataSet,因为< - 运算符仅在本地分配值环境。”

我用这个来改变闪亮的成功程度。与往常一样,要小心全局变量。

以上是关于R Shiny中是否存在全局变量?的主要内容,如果未能解决你的问题,请参考以下文章

在 R Shiny 中操作 textInput

R Shiny Bar Plot并输入$ var问题

用情节 Shiny R 制作累积图形

Selectizeinput 输入互斥 R Shiny

在 Shiny 中使用部分 textInput 作为 R 中的变量

R Shiny中的Plotly分组条形图