Я пытаюсь создать свое первое приложение Shiny.Я могу загрузить файл .csv с простым набором данных, который я создал, и очень хорошо отобразить таблицу на первой вкладке.Затем я пытаюсь использовать те же данные для создания гистограммы, используя ggplot2.За пределами Shiny, гистограмма генерирует отлично.НО внутри приложения он генерирует график с одним столбцом, а не столбцами, представляющими счетчик каждого типа «домашнее животное», как предполагается, просто столбец, представляющий счетчик всех строк (30).Я не уверен, почему он не будет учитывать каждый тип "питомца" в Shiny, пожалуйста, помогите?
Я пытался использовать is.character и is.factor
Столбец данных, который использует скрипт, состоит из 30 строк различных типов домашних животных (например, собака, кошка, птица, ящерица).Окончательный график должен быть гистограммой с подсчетом каждого типа этих питомцев.
library(shiny)
library(dplyr)
library(ggplot2)
library(readr)
МОЙ КОД UI:
ui <- fluidPage(
# App title ----
titlePanel("Magic Pets"),
# Sidebar layout with input and output definitions ----
sidebarLayout(
# Sidebar panel for inputs ----
sidebarPanel(
# Input: Upload .csv
fileInput('file1', 'Choose .CSV File',
accept=c('text/csv',
'text/comma-separated-values,text/plain',
'.csv')),
selectInput("xcol", "Pets", "", selected = "")),
# Main panel for displaying outputs ----
mainPanel(
# Output: Tabset for data table and plot
tabsetPanel(type = "tabs",
tabPanel("Pet Data", DT::dataTableOutput('contents')),
tabPanel("Lucky Pet Plot", plotOutput("MyPlot"))
)
)
)
)
МОЙ КОД СЕРВЕРА:
server <- function(input, output, session) {
output$MyPlot <- renderPlot({
z <- myData()[,input$xcol]
p <- ggplot(z, aes(x=input$xcol, fill = input$xcol)) +
geom_bar(stat="count")
print(p)
})
myData <- reactive({
req(input$file1) # require that the input is available
df <- read_csv(input$file1$datapath)
updateSelectInput(session,
inputId = "xcol", label = "Pets",
choices = names(df), selected = names(df)[sapply(df,
is.character)])
return(df)
})
# Generate an HTML table view of the data ----
output$contents <- DT::renderDataTable({
DT::datatable(myData())
})
}
shinyApp(ui, server)