Перекрестная вкладка для дополнения линейного графика в приложении Shiny - PullRequest
0 голосов
/ 16 октября 2019

У меня проблемы с созданием блестящего приложения, которое создает динамическую кросс-таблицу, в которой можно изменить одну из переменных.

То есть я хотел бы создать приложение, которое создает кросс-таблицу, которая показываетпроцент студентов, которые прошли по каждой характеристике, а также отобразили это на гистограмме.

Гистограмма не представляет проблемы. Я не могу понять, как изменить вход в кросс-таблицу.

Выходная секция $ my_table в объекте сервера находится там, где проблема.

Любая помощь будет принята с благодарностью

library(shiny)
library(ggplot2)

students <- data.frame(Passed = c("Y","Y","Y","Y","Y","Y","N","N"), Gender = rep(c("Male","Female"), each = 4), 
                       Subject = rep(c("Maths","Science"), times = 4),Campus =c(rep(c("Victoria"), times = 7), "NSW"))


ui <- fluidPage(
  titlePanel("Percentage Passed by Characteristic"),
  sidebarLayout(sidebarPanel(
    selectInput(
      "Characteristic",
      "Student characteristic",
      choices = colnames(students)[!colnames(students) %in% c("Passed")],
      selected = colnames(students)[2]
    )
  ),
  mainPanel(
    tabPanel("Plot",
             fluidRow(
               plotOutput("barplot"),
               verbatimTextOutput("summary"))
    ),
    tabPanel("Summary",  
             tableOutput("my_table"))
  )
  ))


server <- function(input, output) {
    output$barplot <- renderPlot({
      var <- input$Characteristic
      gg <-
        ggplot(students, aes_string(x = var, fill= "Passed"))
      gg <- gg + geom_bar(position = "Stack")
      gg
    })
    output$my_table <- renderTable({
      var <- input$Characteristic
      prop.table(table(students$Passed, students$var),1)
    })
}



# Create Shiny object
shinyApp(ui = ui, server = server)

1 Ответ

0 голосов
/ 16 октября 2019

Проблема в том, что students$var относится к столбцу, буквально названному "var", тогда как вы хотите, чтобы столбец именовался значением var: students[[var]].

Это решает вопрос "получить доступ к столбцу фрейма данных, используя переменную ", и ответил в последнем предложении победившего ответа. получить доступ к столбцу фрейма данных с помощью переменной

Я диагностировал проблему, запустив ваш код в интерактивном сеансе R, установив var в Gender, а затем запустив строку prop.table(..., котораявыдает ошибку:

Error in table(students$Passed, students$var) :
  all arguments must have the same length

Следующая проблема, с которой вы столкнетесь, - это форматирование итогового файла prop.table, но это заслуживает другого вопроса.

...