Упорядочение данных по столбцу строк в Shiny - PullRequest
0 голосов
/ 25 января 2019

Имена строк кадра данных iris: «1», «2», «3», ... Когда я устанавливаю 0-й столбец как упорядочиваемый с помощью DT, упорядочение ведет себя так, как если бы имена строк были числовыми:

library(DT)
datatable(iris, 
          options = list(
            columnDefs = list(
              list(orderable=TRUE, targets=0)
            )
          )
) 

enter image description here

Nice. Теперь, когда я делаю то же самое внутри блестящего, поведение отличается: порядок ведет себя так, как если бы имена строк были символьными строками:

library(shiny)
shinyApp(
  ui = fluidPage(fluidRow(column(12, DTOutput('tbl')))),
  server = function(input, output) {
    output$tbl = renderDT(
      iris, options = list(
        columnDefs = list(
          list(orderable=TRUE, targets=0)
        )
      )
    )
  }
)

enter image description here

Не приятно. В чем причина разницы? Я хотел бы иметь первое поведение в Shiny. Как обходной путь, мы могли бы установить числовой столбец в первой позиции и установить rownames=FALSE, но мне интересно, есть ли более простое решение, и я заинтригован этой разницей.

EDIT

Я наконец-то поступил следующим образом:

output$tbl = renderDT({
  dt <- datatable(
    iris, options = list(
      columnDefs = list(
        list(orderable=TRUE, targets=0)
      )
    )
  )
  dt$x$data[[1]] <- as.numeric(dt$x$data[[1]]) 
  dt
})

1 Ответ

0 голосов
/ 07 февраля 2019

ТАК говорит мне, что мне нужно 50 репутации, чтобы комментировать, поэтому вот мой комментарий в форме ответа.

Другим обходным решением было бы сделать следующее:

output$tbl = renderDT({
  dt <- datatable(
    iris %>%
       rownames_to_column("UID") %>%
       select(UID, everything()),
 options = list(
      columnDefs = list(
        list(orderable=TRUE, targets=0)
      )
    )
  )
  dt

Это не отвечает на ваш вопрос, почему так происходит.

...