【发布时间】: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)。这会更容易,因为它避免了服务器端的有趣行为,但我想仍然是一种解决方法;)