R / R Shiny - 全局数据帧数组(通过引用分配)?

R / R Shiny - global dataframes array (assigned by reference)?

我有一个数据帧 df1,并将其子集化为 df1sub 并在 R shiny renderPlot() 调用中显示它。同样,我有 df2,我将它子集化为 df2sub,并通过单独的 renderPlot() 调用在 R shiny 中渲染它。顺便说一句,这些子集是根据用户在 R Shiny 应用程序中的选择创建的。

现在,我有一个数据表,我想更改它以反映当前数据集是什么,所以我想要某种全局的,例如:

buffers[1] <- df1sub
buffers[2] <- df2sub

我将如何定义这个全局变量?我尝试单独执行 buffers = array() 来初始化一个全局变量,但是我在上面写的赋值不起作用?

Update:尝试按照下面的建议使用“<<-”运算符会产生以下结果:

buffers <- NULL #don't know how else to initialize. array() yields same error as below.
buffers[1] <<- df # Error in buffers[1] <<- df : object 'buffers' not found

你可以采用这种方式:

library(shiny)

shinyServer(function(input, output) {

  ...
  some.reactive.expression <- reactive1({
     ...
     buffers[1] <<- df1sub
     buffers[2] <<- df2sub
     ...
  })
})

有一些更新:

#In global.R
buffers <- list()
buffers[[1]] <- data.frame()
buffers[[2]] <- data.frame()
buffers[[1]] <- df1 #original dataset, as a default, before subsets are created
buffers[[2]] <- df2 #ditto.

然后在 server.R:

r1 <- reactive({
... #create subset of df, then return it
buffers[[1]] <<- subset(...)
buffers[[1]] #return it as dynamic data for plots
})

r2 <- reactive({...}) #ditto

然后在渲染图中:

output$blah <- renderplot(r1()...)
output$foo <- renderplot(r2()...)

将全局缓冲区[] var 单独留给第三个 UI 小部件(例如数据 table)...