2015-01-26 32 views
2

我有一个数据帧df1,并将其子集到df1sub并显示它在一个R闪亮renderPlot()调用。同样,我有df2,并将它分配给df2sub,并通过单独的renderPlot()调用将其呈现在R光泽中。 Btw这些子集是基于R Shiny应用程序中的用户选择创建的。R/R Shiny - 全局数据框数组(由参考分配)?

现在,我有我想改变,以反映无论当前的数据是一个DataTable,所以我想某种全球性,如:

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

我怎么会去定义这个全局变量?我尝试单独做buffer = array()来初始化一个全局变量,但是随后我写上面的赋值不起作用?

更新:尝试使用了 '< < -' 如下建议运营商可以得到以下:

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 
+0

如果数据变化也应该在其他反应函数中可用,你可能想看看'reactiveValues' [here](http://shiny.rstudio.com/reference/shiny/ latest/reactiveValues.html) – Vincent 2015-01-26 23:35:28

+0

http://stackoverflow.com/questions/15327506/r-shiny-how-to-save-input-data-to-the-server-or-access-input-variables-globally ? – MHH 2015-01-27 01:40:41

回答

0

可以采用这种方式:

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 

然后在renderplot:

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

离开[]变种分别提供给第三UI插件的全局缓冲液(例如一个数据表)...

+0

哇...我从字面上从来没有遇到过这个操作员到现在,并不得不谷歌它:-)我会试试这个,并会很快回来接受答案... – rstruck 2015-01-26 21:59:48

+0

快速问:做' renderPlot()中的df < - buffers [1]'是否会击败对象?即它会尝试在那一点上按价值复制? nm ...只是试了一下。我收到一个错误,说'错误:参数长度为零' – rstruck 2015-01-26 22:13:21

+0

我想可能会发生这种情况,因为'buffers'是一个向量。你可以尝试'缓冲区< - list()'和'buffers [[1]] << - df1sub;缓冲区[[2]] << - df2sub'而不是? – 2015-01-27 18:06:49