假设我有以下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)
})
})
Run Code Online (Sandbox Code Playgroud)
为了不必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)
})
})
Run Code Online (Sandbox Code Playgroud)
我做错了什么?
Jak*_*ead 17
data2
是一个返回您正在寻找的子集的函数.因此,您需要调用data2
并将输出保存到某个变量,然后您可以绘制/汇总各个列
## data should be defined somewhere up here or in global.R
shinyServer(function(input, output) {
data2 <- reactive(data[data$x == input$z, ])
output$plot <- renderPlot({
newData <- data2()
plot(newData$x, newData$y)
})
output$table <- renderTable({
newData <- data2()
summary(newData$x)
})
})
Run Code Online (Sandbox Code Playgroud)
如果您还没有,我建议您阅读http://rstudio.github.io/shiny/tutorial/#welcome.关于反应性的页面很好地解决了这个问题.