Фактический вопрос, который вы задаете, должен быть решен путем превращения user_data
в реактив и рендеринга входных данных с использованием uiOutput + renderUI, как правильно прокомментировал @kwiscion.
Но, к сожалению, в вашем коде есть несколькодругие ошибки, которые делают его невоспроизводимым:
- Пример набора данных должен быть
diamonds
, а не cars
input$quote
не существует в вашем коде, поэтому я удалилссылка на него - Вам нужно включить
library(dplyr)
для некоторых функций в вашем коде input$entityx
и input$indicatorx
не существует
Вышеуказанные 4 ошибки не связаны с вашим вопросом, но затрудняют и дольше отвечают на ваш вопрос.В будущем, пожалуйста, постарайтесь убедиться, что код, который вы публикуете, является правильным и воспроизводимым.
Ниже приведен ответ на ваш вопрос, который решил 4 вышеуказанных вопроса и реализовал два предложения @ kwiscion
library(shiny)
library(shinyWidgets)
library(ggplot2)
library(dplyr)
ui <- fluidPage(
titlePanel("test shiny"),
# Sidebar with a slider input for number of bins
sidebarLayout(sidebarPanel(
fileInput('file1', 'Choose file to upload',
accept = c(
'text/csv',
'text/comma-separated-values',
'text/tab-separated-values',
'text/plain',
'.csv',
'.tsv'
)
),
tags$hr(),
uiOutput("caratx_input"),
uiOutput("clarityx_input")
),
mainPanel(plotOutput("endplot"))
))
# Define server logic
server <- function(input, output) {
file_data <- reactive({
req(input$file1)
read.csv(input$file1$datapath, header = TRUE,
sep = ",")
})
output$caratx_input <- renderUI({
req(file_data())
pickerInput(
inputId = "caratx",
label = "Choose carat",
choices = c("Select all", unique(file_data()$carat)),
multiple = TRUE
)
})
output$clarityx_input <- renderUI({
req(file_data())
selectInput(
inputId = "clarityx",
label = "Choose distance: ",
choices = unique(file_data()$clarity)
)
})
output$endplot <- renderPlot({
req(file_data())
validate(
need(input$caratx, 'Please select at least one carat'),
need(input$clarityx, 'Please select at least one clarity')
)
user_data <- file_data()
if (input$caratx %in% "Select all") {
user_data <- user_data %>%
filter(carat %in% input$caratx)
} else {
user_data <- user_data %>%
filter(carat %in% input$caratx) %>%
filter(clarity %in% input$clarityx)
}
user_data %>%
ggplot(aes(x = `cut`)) +
geom_point(aes(y = price), color = "red") +
geom_point(aes(y = depth), color = "blue")
})
}
# Run the application
shinyApp(ui = ui, server = server)