8
设置全局对象比方说,我在闪亮以下server.R文件:闪亮
shinyServer(function(input, output) {
output$plot <- renderPlot({
data2 <- data[data$x == input$z, ] # subsetting large dataframe
plot(data2$x, data2$y)
})
output$table <- renderTable({
data2 <- data[data$x == input$z, ] # same subset. Oh, boy...
summary(data2$x)
})
})
我能为了做不用跑了每一个渲染调用中data2 <- data[data$x == input$z, ]
?如果我做了以下操作,我得到一个“对象类型'关闭'不可子集”错误:
shinyServer(function(input, output) {
data2 <- reactive(data[data$x == input$z, ])
output$plot <- renderPlot({
plot(data2$x, data2$y)
})
output$table <- renderTable({
data2 <- data[data$x == input$z, ]
summary(data2$x)
})
})
我做错了什么?
感谢您的帮助,我对Shiny非常陌生(这是我第二天使用它)。你的解决方案是有效的,但是当我在我的子集例程中插入一个'ifelse()'的时候,并不是这样,它实际上就是这样的:'data2 < - reactive(ifelse(input $ z =='',data,data [data $ x ==输入$ z,]))'。当我这样做时,我得到以下错误:'在plot.window(xlim,ylim,log = log,...)中出错:需要有限的'xlim'值'。 –
顺便说一下,我正在使用RStudio教程(至少是基本部分),并打算深入研究它和随时间推出的软件包文档。 –
@wleoncio错误几乎肯定是因为你传递了一个空的'data.frame'来绘图。所以我会建议做一些调试,以确定'data2'是否会返回您所期望的。你也可以在你的绘图输出函数中添加检查,如'if(nrow(newData)== 0)return()',这将防止它在没有数据时试图绘图。虽然我正在开发一个闪亮的应用程序,但我喜欢添加一个表格,稍后将被注释掉,它只会打印不同的调试值(即当前数据中的行数,某个变量的级别等) –