问题描述
我有以下闪亮的应用程序,它由一个数字输入和两个ggplot图形作为输出。
library(shiny)
n <- 100
dat <- data.frame(var1 = round(rnorm(n,50,10),0),var2 = sample(c("A","B"),n,replace = TRUE))
# USER INTERFACE
ui <- fluidPage(
titlePanel("My Sample App"),sidebarLayout(
sidebarPanel(
numericInput("n","Number of cases",value=100)
),mainPanel(
plotOutput("Boxplot"),plotOutput("distribution")
)
)
)
# SERVER
server <- function(input,output) {
output$Boxplot <- renderPlot({
ggplot(data = dat,aes(x = var2,y = var1)) + geom_Boxplot() + ggtitle("Boxplot")
})
output$distribution <- renderPlot({
ggplot(data = dat,aes(var1)) + geom_histogram() + ggtitle("Histogram")
})
}
# Run the application
shinyApp(ui = ui,server = server)
我一直在尝试将n = 10
替换为n = input$n
。但是,它没有用,我不确定,我必须在哪里定义data.frame(在服务器函数内部?)。有人可以帮忙吗?
解决方法
input$n
是一个反应型变量,只能在反应型上下文中使用。您只能在server
函数中定义反应式上下文,例如使用reactive
。看看here来获得解释。
library(shiny)
library(ggplot2)
# USER INTERFACE
ui <- fluidPage(
titlePanel("My Sample App"),sidebarLayout(
sidebarPanel(
numericInput("n","Number of cases",value=100)
),mainPanel(
plotOutput("boxplot"),plotOutput("distribution")
)
)
)
# SERVER
server <- function(input,output) {
dat <- reactive({
data.frame(var1 = round(rnorm(input$n,50,10),0),var2 = sample(c("A","B"),input$n,replace = TRUE))
})
output$boxplot <- renderPlot({
ggplot(data = dat(),aes(x = var2,y = var1)) + geom_boxplot() + ggtitle("Boxplot")
})
output$distribution <- renderPlot({
ggplot(data = dat(),aes(var1)) + geom_histogram() + ggtitle("Histogram")
})
}
# Run the application
shinyApp(ui = ui,server = server)