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

以下是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函数?我try 将dist置于功能之外,例如:

library(shiny)

shinyServer(function(input, output) {

  dist <- rnorm(input$obs)

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

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

})

但是我得到一个错误,说没有找到"dist"对象.这是我真实代码中的一个玩具示例,我有50行代码,我正在粘贴到多个"渲染…"作用有什么帮助吗?

哦,是的,如果你想运行这段代码,只需创建一个文件并运行以下命令:

其中"TestShining"是我的R studio项目的名称.

推荐答案

Shiny webpage页的这一页解释了shiny 变量的范围.

全局变量可以放在server.R(根据李嘉图的答案)或global.R中.

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

实际上,在很多情况下,不需要在服务器之间共享变量.R和ui.R.用户界面中的代码.当shiny 的应用程序启动时,R运行一次,并生成一个HTML文件,该文件被缓存并发送到每个连接的web浏览器.这可能有助于设置一些共享配置选项.

R相关问答推荐

extract()函数不处理stanfit对象,我用错了吗?

当y大于阈值和值范围时,在时间序列中突出显示区域

使用sensemakr和fixest feols模型(R)

R:连接值,而不是变量?

使用case_match()和char数组重新编码值

使用tidy—select创建一个新的带有mutate的摘要变量

如何在格子中添加双曲曲线

在GGPLATE中将突出的点放在前面

如何编辑gMarginal背景以匹配绘图背景?

合并DFS列表并将索引提取为新列

2个Rscript.exe可执行文件有什么区别?

您是否可以使用facet_rap设置一个较低的限制来对ggmap上的比例中断进行zoom ?

使用R中的dist()迭代ID匹配的欧几里德距离

在列表中排列R数据框中的列顺序

随机森林的带Shap值的蜂群图

我将工作代码重构为一个函数--现在我想不出如何传递轴列参数

R代码,用于在线条图下显示观测表

ggplot R:X,Y,Z使用固定/等距的X,Y坐标绘制六边形热图

是否可以将线性模型的p值添加到tbl_summary中

如何使用包metaviz更改标签的小数位数?