2016-06-08 80 views
0

我试图开发一个闪亮的应用程序,从英国首屈一指的联赛数据从1992年到日期,并按各种条件排序所有俱乐部。例如根据用户选择的“输入目标”或“输赢比例”,输出结果应显示前5名俱乐部。dplyr函数与闪亮的应用程序与desc的问题

我使用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转换来传递的,但也没有效果。所以我不确定我的选择是根据用户输入按降序对数据集进行排序。

任何帮助,将不胜感激!

+1

的问题是使用'递减'。你需要在'arrange_'中使用'interp'。 [这个问题]的评论(http://stackoverflow.com/questions/27034655/how-to-use-dplyrarrangedesc-when-using-a-string-as-column-name?lq=1)显示如何做这个。 – aosmith

回答

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) 

enter image description here

+1

谢谢你做到了! –