当用户选择一个时,将数据帧排序两列

时间:2016-06-27 09:03:11

标签: r sorting shiny

我想先按两列对数据框进行排序是因子和第二个数字,但这是在闪亮中选择的。

当我在指定列中使用此行时,效果很好。

 iris1<-iris[with(iris,order(Species,Sepal.Length,decreasing = T)), ]

但在内部闪亮我用反应值替换Sepal.Length,这会返回错误。请参阅MRE

# ui.R
library(shiny)


shinyUI(pageWithSidebar(

  # Application title
  headerPanel("Miles Per Gallon"),

  sidebarPanel(selectInput("a","select column",c("Sepal.Length","Sepal.Width"))),

  mainPanel(tableOutput("b"))
))

# server.R   
library(shiny)


shinyServer(function(input, output) {

  col<-reactive({input$a})
 output$b<- renderTable({
########### this line probably causes the problem
   iris1<-iris[with(iris,order(Species,col(),decreasing = T)), ]
})
})

我得到的错误是

Error in order(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,  : 
  argument lengths differ

1 个答案:

答案 0 :(得分:3)

尝试使用get()将字符串转换为列名:

col <- "Sepal.Width"
iris[with(iris, order(Species, get(col), decreasing = TRUE)), ]

在闪亮之内应该是:get(col())

请注意,input$a已经被动,所以我们可以说:get(input$a)