我写了一个Shiny应用程序,我从泊松分布中抽样。每次我想输出一个绘图或数据摘要时,我都重写了该函数。我宁愿只使用一次函数,然后将所有图表和摘要引用到该函数被调用的单次时间,否则结果在输出中将不相同。当我试图调用函数一次并将结果存储为ggplot使用的变量时,我得到了ggplot无法使用反应数据的错误,但我无法将它强制转换为数据框。如何避免在Shiny应用程序中多次重复相同的过程
我试过的变化:
mydata <- reactive({
x <- input$x
y <- input$y
z <- input$z
Muts <- as.data.frame(rpois(100,(x*y*z)))
Muts
})
但是他们没有工作,因为ggplot不能使用输入。我认为我没有正确使用反应函数。任何帮助减少代码冗余,并确保绘图和总结都使用相同的单个底层数据非常感谢。先谢谢你。
我当前的代码:
server.R
library(shiny)
library(ggplot2)
# Define server logic required to draw a histogram
function(input, output) {
output$distPlot <- renderPlot({
x <- input$x
y <- input$y
z <- input$z
Muts <- as.data.frame(rpois(100,(x*y*z)))
# draw the density plot
ggplot(Muts, aes(Muts)) + geom_density()
})
output$distPlot2 <-renderPlot({
x <- input$x
y <- input$y
z <- input$z
Muts <- as.data.frame(rpois(100,(x*y*z)))
Muts <- as.data.frame(Muts)
ggplot(Muts, aes(Muts)) + geom_histogram()
})
output$summary <- renderPrint({
x <- input$x
y <- input$y
z <- input$z
Muts <- as.data.frame(rpois(100,(x*y*z)))
summary(Muts)
})
}
您需要在您的'ggplot'调用中调用反应表达式,因为这是包含数据的内容。 'ggplot(myData(),aes(...))+ ...' – SymbolixAU
另请参阅[此答案](http://stackoverflow.com/a/40336002/5977215) – SymbolixAU