R:使用Shiny中的公式对象来检索描述性统计信息



我正试图使用Shiny构建一个响应式应用程序,以使用R包onewaytests检索描述性统计信息。

在选择了要在描述性统计中使用的列变量后,我无法成功地使用它们来创建公式对象,例如describe(parktime ~ parkstop, test)。我试过renderDataTablerenderTablerenderTextrenderUI。什么都不起作用,我收到错误消息:

警告:描述中出错:组变量的名称不匹配数据中的变量名。组变量必须是一个因子。[无可用堆栈跟踪]

这是我的错误代码:

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()在应用程序内失败。在Shiny应用程序之外运行onewaytests的describe()完全正常,如下所示:

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

您需要从input中获取respexpl的字符串,并创建一个公式:

describe(as.formula(paste(input$resp, '~', input$expl)), test)

最新更新