【问题标题】:Ordering a datatable by the rownames column in Shiny按 Shiny 中的 rownames 列排序数据表
【发布时间】:2019-06-19 04:18:31
【问题描述】:

iris 数据框的行名是“1”、“2”、“3”、... 当我使用DT 将第 0 列设置为可排序时,排序的行为就像行名称是数字一样:

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

很好。现在,当我在闪亮的内部执行相同操作时,行为会有所不同:排序的行为就像行名是字符串一样:

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)
        )
      )
    )
  }
)

不好。造成差异的原因是什么?我想在 Shiny 中有第一个行为。作为一种解决方法,我们可以在第一个位置设置一个数字列并设置rownames=FALSE,但我想知道是否有更简单的解决方案,我对这种差异很感兴趣。

编辑

我终于这样走了:

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
})

【问题讨论】:

  • 不确定它是否符合您的要求,但您可以关闭服务器端处理:renderDT(..., server = FALSE)。这会更容易,因为它避免了服务器端的有趣行为,但我想仍然是一种解决方法;)

标签: r shiny dt


【解决方案1】:

SO 告诉我我需要 50 声望才能发表评论,所以这是我在回答表单中的评论。

另一种解决方法是执行以下操作:

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

它并没有回答你为什么会发生的问题。

【讨论】:

    猜你喜欢
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-02
    • 2019-12-21
    • 1970-01-01
    • 2017-11-04
    • 1970-01-01
    相关资源
    最近更新 更多