我在创建一个闪亮的应用程序时遇到了麻烦,该应用程序创建了一个动态交叉表,可以在其中更改变量之一。
也就是说,我想创建一个应用程序,该应用程序创建一个交叉表,该交叉表显示通过每个特征的学生百分比,并在条形图中显示该数字。
条形图没有问题。我无法弄清楚如何更改交叉表中的输入。
问题所在是服务器对象中的output $ 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)
答案 0 :(得分:0)
问题在于students$var
引用了一个字面名称为“ var”的列,而您希望该列的名称为var
:students[[var]]
。
解决了“使用变量访问数据框列”问题,并在获胜答案的最后一句中回答。 access data frame column using variable
我通过在交互式R会话中运行代码,将var
设置为Gender
,然后运行prop.table(...
行来诊断问题:
Error in table(students$Passed, students$var) :
all arguments must have the same length
您将面临的下一个问题是格式化生成的prop.table,但这值得另一个问题。