闪亮 - 过滤用户输入变量
Shiny - filtering for user input variable
我只是想创建一个基本的闪亮应用程序,允许用户查看选定变量的简单图并根据需要应用过滤器。
但是,我很难让绘图与应用的过滤器一起工作。如果我不应用过滤器,我可以让绘图工作,但当前代码给出错误:"Error: no applicable method for 'filter_' applied to an object of class "character"".
我意识到问题与试图绘制的内容有关,可能与应用于 "input$Variable" 的过滤器有关,但我无法解决!任何帮助表示赞赏!
这是我的代码:
library(shiny)
data <- read.csv("df1Final.csv", stringsAsFactors = T)
ui <- fluidPage(
titlePanel("PhD Data"),
sidebarLayout(
sidebarPanel(
uiOutput("Variable"),
sliderInput("Age.Yr", "Age:", 8, 12, c(8,12), step = 0.25),
sliderInput("Train.Hr", "Training (Hours):", 9, 11, c(9,11), step = 0.1),
sliderInput("Grade", "Grade:", 3, 5, c(3,5), step = 1)
),
mainPanel(plotOutput("coolplot"),
br(), br(),
verbatimTextOutput("results")
)
)
)
server <- function(input, output) {
output$Variable <- renderUI({
selectInput("Variable", "Data:", choices = colnames(data)[-1])
})
filtered <- reactive({
if (is.null(input$Variable)) {
return(NULL)
}
input$Variable %>%
filter(Age.Yr >= input$Age.Yr[1],
Age.Yr <= input$Age.Yr[2],
Train.Hr >= input$Train.Hr[1],
Train.Hr <= input$Train.Hr[2],
Grade >= input$Grade[1],
Grade <= input$Grade[2]
)
})
output$coolplot <- renderPlot({
if (is.null(filtered())) {
return()
}
ggplot(filtered(), aes(x=filtered(), color=Group)) +
geom_density()
})
output$results <- renderPrint({
describeBy(data[,input$Variable], data$Group, mat = F)
})
}
# Run the application
shinyApp(ui = ui, server = server)
我认为问题在于您过滤的是 Shiny 传递给您的实际值,而不是您的数据。 Input$Variable 不是一组数据,它只是该列数据的标题。
在操作之前尝试打印出 input$Variable。
所以我已经能够通过将过滤调整为:
来实现它
data[input$Variable] %>% ...
然后我还必须将 ggplot 中的 aes 调整为:
aes_string(x=input$Variable)
目前仍在尝试找出如何将 color = Group 添加到 ggplot,因为这现在不起作用。
我只是想创建一个基本的闪亮应用程序,允许用户查看选定变量的简单图并根据需要应用过滤器。
但是,我很难让绘图与应用的过滤器一起工作。如果我不应用过滤器,我可以让绘图工作,但当前代码给出错误:"Error: no applicable method for 'filter_' applied to an object of class "character"".
我意识到问题与试图绘制的内容有关,可能与应用于 "input$Variable" 的过滤器有关,但我无法解决!任何帮助表示赞赏!
这是我的代码:
library(shiny)
data <- read.csv("df1Final.csv", stringsAsFactors = T)
ui <- fluidPage(
titlePanel("PhD Data"),
sidebarLayout(
sidebarPanel(
uiOutput("Variable"),
sliderInput("Age.Yr", "Age:", 8, 12, c(8,12), step = 0.25),
sliderInput("Train.Hr", "Training (Hours):", 9, 11, c(9,11), step = 0.1),
sliderInput("Grade", "Grade:", 3, 5, c(3,5), step = 1)
),
mainPanel(plotOutput("coolplot"),
br(), br(),
verbatimTextOutput("results")
)
)
)
server <- function(input, output) {
output$Variable <- renderUI({
selectInput("Variable", "Data:", choices = colnames(data)[-1])
})
filtered <- reactive({
if (is.null(input$Variable)) {
return(NULL)
}
input$Variable %>%
filter(Age.Yr >= input$Age.Yr[1],
Age.Yr <= input$Age.Yr[2],
Train.Hr >= input$Train.Hr[1],
Train.Hr <= input$Train.Hr[2],
Grade >= input$Grade[1],
Grade <= input$Grade[2]
)
})
output$coolplot <- renderPlot({
if (is.null(filtered())) {
return()
}
ggplot(filtered(), aes(x=filtered(), color=Group)) +
geom_density()
})
output$results <- renderPrint({
describeBy(data[,input$Variable], data$Group, mat = F)
})
}
# Run the application
shinyApp(ui = ui, server = server)
我认为问题在于您过滤的是 Shiny 传递给您的实际值,而不是您的数据。 Input$Variable 不是一组数据,它只是该列数据的标题。
在操作之前尝试打印出 input$Variable。
所以我已经能够通过将过滤调整为:
来实现它data[input$Variable] %>% ...
然后我还必须将 ggplot 中的 aes 调整为:
aes_string(x=input$Variable)
目前仍在尝试找出如何将 color = Group 添加到 ggplot,因为这现在不起作用。