我是RShiny和R新手。我正在尝试编写RShiny应用程序。默认情况下,它将首先使用数据集的前三个变量来绘制散点图矩阵。然后,用户可以从完整的变量列表中选择自己的变量选择。选择变量后,用户将单击并单击操作按钮,然后将使用新选择的变量重新计算图形。
我正在使用selectinput而不是checkboxinput来容纳具有许多变量的数据集。我正在使用虹膜数据集。下面的代码生成初始图,并允许用户选择变量。我只是不知道如何使它重新计算矩阵图。我该怎么做呢?谢谢!
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")
})
}
)
)
答案 0 :(得分:0)
我认为您正在寻找的是quo
函数,就像Chris Beely博客中的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")
})
}
)
)