我有以下闪亮的应用程序,它由一个数字输入和两个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 = input$n
替换n = 10
。然而,它不起作用,我不确定,我必须在哪里定义data.frame(在服务器函数中?(。有人能帮忙吗?
input$n
是一个反应变量,只能在反应上下文中使用。您只能在server
函数中定义反应上下文,例如使用reactive
。请看这里以获得解释。
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)