R: Использование объектов формул в Shiny для получения описательной статистики - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь использовать Shiny для создания адаптивного приложения для получения описательной статистики с использованием пакета R onewaytests.

После выбора переменных столбца для использования в описательной статистике я не могу успешно использовать их длясоздайте объект формулы, например describe(parktime ~ parkstop, test). Я пробовал renderDataTable, renderTable, renderText и renderUI. Ничего не работает, и мне выдается сообщение об ошибке:

Предупреждение: ошибка в описании: Имя переменной группы не совпадает с именами переменных в данных. Групповая переменная должна быть одним фактором. [Нет трассировки стека]

Вот мой ошибочный код:

library(shiny)
library(onewaytests)

# create test data
test <- data.frame("likert" = c(1,1,1,3,1,3,2,2,1,4,2,2,3,3,4,4,5,5), 
                   "parkspot" = c(1,1,1,4,1,2,1,3,1,4,3,3,2,2,1,1,2,4), 
                   "parktime" = c(5,10,5,13,5,1,10,5,1,15,2,43,2,3,4,2,11,1),
                   "walktime" = c(5,5,30,5,3,1,10,5,5,5,5,12,11,2,3,4,4,3))

# likert and parkspot to factor
test[, 1] <- as.factor(test[, 1])
test[, 2] <- as.factor(test[, 2])

# give names
levels(test$likert) <- list("Extremely familiar" = 1,
                            "Moderately familiar" = 2,
                            "Somewhat familiar" = 3,
                            "Slightly familiar" = 4,
                            "Not at all familiar" = 5)

levels(test$parkspot) <- list("On the side of street" = 1,
                              "Parking lot" = 2,
                              "Parking garage" = 3,
                              "Other" = 4)

# This runs fine outside of shinyApp
describe(walktime ~ parkspot, test)

# shinyApp code
server <- function(input, output){

  # some unsuccessful tests
  output$test1 <- renderTable({
    describe(input$resp ~ input$expl, test)
  })

  output$test2 <- renderText({
    paste(input$resp,
          input$expl)
  })

  output$test3 <- renderDataTable({
    describe(input$resp ~ input$expl, test)
  })
}

ui <- shinyUI(fluidPage(

  titlePanel("thing"),

  sidebarLayout(
    sidebarPanel(

      #walktime or parktime
      selectInput("resp", 
                  "response (continuous)", 
                  names(test[-c(1,2)])),

      # all others
      selectInput("expl", 
                  "explanatory (ordinal)", 
                  names(test[-c(3,4)]))
    ),

    mainPanel(
      tableOutput("test1"),
      verbatimTextOutput("test2"),
      dataTableOutput("test3")
    )
  )
))

shinyApp(ui = ui, server = server, options = list("test.mode"))

Возможно ли это? Похоже, describe() не работает внутри приложения. Запуск onewaytests 'describe() вне приложения Shiny работает совершенно нормально, вот так:

                      n     Mean  Std.Dev Median Min Max 25th 75th   Skewness Kurtosis NA
On the side of street 8 8.125000 9.109453      5   3  30 3.75 6.25  2.0290427 5.475618  0
Parking lot           4 4.500000 4.509250      3   1  11 1.75 5.75  0.9067530 2.122279  0
Parking garage        3 7.333333 4.041452      5   5  12 5.00 8.50  0.7071068 1.500000  0
Other                 3 4.333333 1.154701      5   3   5 4.00 5.00 -0.7071068 1.500000  0

1 Ответ

1 голос
/ 30 октября 2019

Вам нужно взять строки из ваших input для resp и expl и создать формулу:

describe(as.formula(paste(input$resp, '~', input$expl)), test)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...