我正在尝试为一门课程开发一个闪亮的应用程序,该应用程序从1992年至今收集英国顶级联赛数据,并按各种标准对所有俱乐部进行排序。例如输出应该以“目标得分”或“赢得百分比”的形式向我们展示迄今为止排名前五的俱乐部。无论用户选择哪一项输入。
我正在使用dplyr软件包的arrange_函数来使用用户的输入变量对数据集进行排序,但不断收到错误消息:
Error : incorrect size (1), expecting : 47
以下是创建用户输入的ui.R片段:
radioButtons("categoryInput", "Criteria", choices = list(
"OverallRank"= "Rank",
"Games Played" = "P",
"Games Won" = "W",
"Goals Scored" = "F",
"Total Points" = "Points",
"Win Percentage" = "WinPercent"
), selected = "Points")
以下是我用来对数据集进行排序的server.R的片段:
output$table <- renderTable({
leagueTable = arrange_(pml, desc((input$categoryInput)))
head(leagueTable)
})
我已经读过dplyr函数希望用as.symbol转换传递用户输入,但这也不起作用。所以我不确定我的选择是根据用户输入按递减顺序对此数据集进行排序。
任何帮助将不胜感激!
答案 0 :(得分:0)
正如@aosmith在评论中所提到的,你必须使用interp
:
arrange_(mtcars, lazyeval::interp(~desc(var), var = as.name(input$categoryInput)))
以下是ShinyApp的一个例子:
server <- function(input, output) {
output$table <- renderDataTable({
arrange_(mtcars, lazyeval::interp(~desc(var),
var = as.name(input$categoryInput)))
})
}
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
radioButtons("categoryInput", "Criteria", choices = list(
"Disp"= "disp",
"Cylinder" = "cyl",
"Drat" = "drat"),
selected = "disp")
),
mainPanel(
dataTableOutput("table")
)
)
)
shinyApp(ui = ui, server = server)