为什么我不能使用反应({})在Shiny中设置全局对象?

时间:2015-06-12 16:27:48

标签: r shiny

我的问题类似于以下两个:

Set global object in Shiny

Make object created inside one reactive object available to another in shiny

重要的区别是我想要创建的对象不能在一行中定义。因此,在检查this example后我的理解是我应该使用reactive({ }),但我得到了一个好的旧错误“类型'对象'的对象'不是子集”并且我无法弄清楚是什么我做错了。

具体而言,我正在尝试根据用户定义使用小部件定义的一组变量来对大型数据帧进行子集化。然后,我将使用此数据框独立地使用renderPlot()执行不同的绘图,但使用相同的数据。

我的代码如下:

# mydf is defined previously in global.R  

shinyServer(function(input, output) { 
  ##Subset  
   mydf2<- reactive({
    # by desired Altitude
    mydf<-mydf[c(mydf$Altitud>=input$Altitud[1], mydf$Altitud<=input$Altitud[2]),]

    # by desired Longitude
    mydf<-mydf[c(mydf$Longitud>=input$Longitud[1], mydf$Longitud<=input$Longitud[2]),]

    # by desired Latitud
    mydf<-mydf[c(mydf$Latitud>=input$Latitud[1], mydf$Latitud<=input$Latitud[2]),]
    mydf   
    })

  ## PCA   
  output$pca<- renderPlot({
                    plot(mydf2$eigenvect2, mydf2$eigenvect1)
                  }) 

 ## Other plotting 
 ...
})

如果我从reactive中取出并将其粘贴到output$pca<- renderPlot({内,那么子集就能很好地工作,所以这不是问题所在。

非常感谢,这是我的第一个闪亮的应用程序。

1 个答案:

答案 0 :(得分:0)

以上评论是正确的,以下是我通常的做法:

     output$pca<- renderPlot({
                    plot_df <- mydf2()
                    plot(plot_df$eigenvect2, plot_df$eigenvect1)
                  })