r shinyapp:使用numericInput更改数据帧



我有以下闪亮的应用程序,它由一个数字输入和两个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)

最新更新