我的问题类似于以下两个:
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({
内,那么子集就能很好地工作,所以这不是问题所在。
非常感谢,这是我的第一个闪亮的应用程序。
答案 0 :(得分:0)
以上评论是正确的,以下是我通常的做法:
output$pca<- renderPlot({
plot_df <- mydf2()
plot(plot_df$eigenvect2, plot_df$eigenvect1)
})