我想先按两列对数据框进行排序是因子和第二个数字,但这是在闪亮中选择的。
当我在指定列中使用此行时,效果很好。
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
答案 0 :(得分:3)
尝试使用get()
将字符串转换为列名:
col <- "Sepal.Width"
iris[with(iris, order(Species, get(col), decreasing = TRUE)), ]
在闪亮之内应该是:get(col())
。
请注意,input$a
已经被动,所以我们可以说:get(input$a)