根据 RShiny 中的 renderui 用户输入重新计算 renderplot
Recomputing renderplot based on renderui user input in RShiny
我是 RShiny 和 R 的新手。我正在尝试编写一个 RShiny 应用程序。默认情况下,它最初会使用数据集的前三个变量绘制散点图矩阵。然后,用户可以从完整的变量列表中选择自己的变量 selections。选择变量后,用户将单击操作按钮,然后将使用新 selected 变量重新计算图形。
我使用 selectinput 而不是 checkboxinput 来适应具有许多变量的数据集。我正在使用 iris 数据集。下面的代码生成初始图形并允许用户 select 变量。我只是不知道如何让它重新计算矩阵图。我该怎么做呢?谢谢!
library(shiny)
runApp(list(
ui = fluidPage(
cols = colnames(iris),
headerPanel('Grow Clusters'),
tabsetPanel(
tabPanel("Plot",
sidebarPanel(
# uiOutput("varselect"),
selectInput("choose_vars", "Select variables to plot",
choices=colnames(iris), selected=iris[1:3], multiple=T),
actionButton("submitButton", "Produce Matrix Plot!")
),
mainPanel(
plotOutput('pairsplot')
)
),
tabPanel("Summary")
,
tabPanel("Table")
)
),
server = function(input, output) {
selectedData <- reactive({
cols = colnames(iris)
selectInput("choose_vars", "Select variables to plot",
choices=cols, selected=cols[1:3], multiple=T)
})
output$pairsplot <- renderPlot({
pairs(iris[1:3], pch = 21)
})
output$varselect <- renderUI({
iris[input$choose_vars]
plotOutput("pairsplot")
})
}
)
)
我认为您正在寻找的是 Chris Beely 博客中的 quo
函数:https://chrisbeeley.net/?p=1116
如果您希望用户传递参数然后将该字符向量转换为对象 r 可以读取您需要使用 quo(input$choose_vars)
然后在绘图中您需要在该传递变量之前添加 !!
.请注意,您需要加载 dplyr
.
library(shiny)
library(dplyr)
runApp(list(
ui = fluidPage(
cols = colnames(iris),
headerPanel('Grow Clusters'),
tabsetPanel(
tabPanel("Plot",
sidebarPanel(
# uiOutput("varselect"),
selectInput("choose_vars", "Select variables to plot",
choices=colnames(iris), selected=iris[1:3], multiple=T),
actionButton("submitButton", "Produce Matrix Plot!")
),
mainPanel(
plotOutput('pairsplot')
)
),
tabPanel("Summary")
,
tabPanel("Table")
)
),
server = function(input, output) {
selectedData <- reactive({
cols <- colnames(iris)
selectInput("choose_vars", "Select variables to plot",
choices=cols, selected=cols[1:3], multiple=T)
})
output$pairsplot <- renderPlot({
if(is.null(input$choose_vars) || length(input$choose_vars)<2){
pairs(iris[1:3], pch = 21)
} else {
var <- quo(input$choose_vars)
pairs(iris %>% select(!!var), pch = 21)
}
})
output$varselect <- renderUI({
iris[input$choose_vars]
plotOutput("pairsplot")
})
}
)
)
我是 RShiny 和 R 的新手。我正在尝试编写一个 RShiny 应用程序。默认情况下,它最初会使用数据集的前三个变量绘制散点图矩阵。然后,用户可以从完整的变量列表中选择自己的变量 selections。选择变量后,用户将单击操作按钮,然后将使用新 selected 变量重新计算图形。
我使用 selectinput 而不是 checkboxinput 来适应具有许多变量的数据集。我正在使用 iris 数据集。下面的代码生成初始图形并允许用户 select 变量。我只是不知道如何让它重新计算矩阵图。我该怎么做呢?谢谢!
library(shiny)
runApp(list(
ui = fluidPage(
cols = colnames(iris),
headerPanel('Grow Clusters'),
tabsetPanel(
tabPanel("Plot",
sidebarPanel(
# uiOutput("varselect"),
selectInput("choose_vars", "Select variables to plot",
choices=colnames(iris), selected=iris[1:3], multiple=T),
actionButton("submitButton", "Produce Matrix Plot!")
),
mainPanel(
plotOutput('pairsplot')
)
),
tabPanel("Summary")
,
tabPanel("Table")
)
),
server = function(input, output) {
selectedData <- reactive({
cols = colnames(iris)
selectInput("choose_vars", "Select variables to plot",
choices=cols, selected=cols[1:3], multiple=T)
})
output$pairsplot <- renderPlot({
pairs(iris[1:3], pch = 21)
})
output$varselect <- renderUI({
iris[input$choose_vars]
plotOutput("pairsplot")
})
}
)
)
我认为您正在寻找的是 Chris Beely 博客中的 quo
函数:https://chrisbeeley.net/?p=1116
如果您希望用户传递参数然后将该字符向量转换为对象 r 可以读取您需要使用 quo(input$choose_vars)
然后在绘图中您需要在该传递变量之前添加 !!
.请注意,您需要加载 dplyr
.
library(shiny)
library(dplyr)
runApp(list(
ui = fluidPage(
cols = colnames(iris),
headerPanel('Grow Clusters'),
tabsetPanel(
tabPanel("Plot",
sidebarPanel(
# uiOutput("varselect"),
selectInput("choose_vars", "Select variables to plot",
choices=colnames(iris), selected=iris[1:3], multiple=T),
actionButton("submitButton", "Produce Matrix Plot!")
),
mainPanel(
plotOutput('pairsplot')
)
),
tabPanel("Summary")
,
tabPanel("Table")
)
),
server = function(input, output) {
selectedData <- reactive({
cols <- colnames(iris)
selectInput("choose_vars", "Select variables to plot",
choices=cols, selected=cols[1:3], multiple=T)
})
output$pairsplot <- renderPlot({
if(is.null(input$choose_vars) || length(input$choose_vars)<2){
pairs(iris[1:3], pch = 21)
} else {
var <- quo(input$choose_vars)
pairs(iris %>% select(!!var), pch = 21)
}
})
output$varselect <- renderUI({
iris[input$choose_vars]
plotOutput("pairsplot")
})
}
)
)