2016-06-27 2 views
1

Я хочу, чтобы сортировать данные по двум столбцам сначала является фактором и вторым числом, но это выбрано в блестящем виде.Сортировка данных по двум столбцам, когда один выбирается пользователем

Когда я использую эту строку с указанными столбцами, она работает хорошо.

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

какой столбец COL() относятся к тому, когда нет цв не выбраны пользователем? –

+0

Sepal.Length есть по умолчанию –

ответ

3

Попробуйте это, используя get() для преобразования строки в имени столбца:

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

И в блестящей должно быть: get(col()).

Обратите внимание, что input$a уже реактивная, так что мы можем сказать: get(input$a)

+0

отлично, я думал, что это может быть проблема. Виды без кавычек и реактивной ценности с кавычками, но не знали, куда идти оттуда :) –

+0

@TomasH 'col()' - это функция в базе R, я бы избегал использовать существующие имена функций в качестве переменных. – zx8754

Смежные вопросы