[英]DT export without format R Shiny
我正在使用DT
的按鈕擴展名導出數據。 單擊copy
或excel
或pdf
時,也會導出格式。
DT
版本 0.14 包含與舊版本 0.5 相反的格式,這是所需的行為。
可重現的示例, Sepal.Width
列,表中的單位為米,我不想導出:
library(shiny)
library(DT)
ui <- fluidPage(
dataTableOutput("dt_table")
)
server <- function(input, output) {
output$dt_table <- renderDataTable({
datatable(
iris,
options = list(dom = 'lBfrtip', buttons = c('copy','excel', 'pdf')),
extensions = 'Buttons'
) %>% formatString(
columns = 'Sepal.Width',
suffix = " meters"
)
})
}
shinyApp(ui = ui, server = server)
您知道導出數據集而不格式化的任何論據嗎?
謝謝你的幫助。
這是一種方法:
library(shiny)
library(DT)
ui <- fluidPage(
DTOutput("dt_table")
)
render <- c(
"function(data, type, row, meta){",
" if(type === 'display'){",
" return data + ' meters';",
" }else{",
" return data;",
" }",
"}"
)
server <- function(input, output) {
output$dt_table <- renderDT({
datatable(
iris,
options = list(
dom = 'lBfrtip',
buttons = list(
list(
extend = "copy",
exportOptions = list(orthogonal = "export")
),
list(
extend = "excel",
exportOptions = list(orthogonal = "export")
),
list(
extend = "pdf",
exportOptions = list(orthogonal = "export")
)
),
columnDefs = list(
list(targets = 2, render = JS(render))
)
),
extensions = 'Buttons'
)
})
}
shinyApp(ui = ui, server = server)
另一種方式:
tplString2 <- function(prefix, suffix, ...) {
sprintf(
"type === 'display' ? DTWidget.formatString(data, %s, %s) : data;",
DT:::jsValues(prefix), DT:::jsValues(suffix)
)
}
formatString2 <- function(table, columns, prefix = '', suffix = '') {
DT:::formatColumns(table, columns, tplString2, prefix, suffix)
}
tplDate2 <- function(method, params, ...) {
params = if (length(params) > 0) paste(',', jsonlite::toJSON(params)) else ''
sprintf(
"type === 'display' ? DTWidget.formatDate(data, %s%s) : data;",
DT:::jsValues(method), params
)
}
formatDate2 <- function(table, columns, method = 'toDateString', params = NULL) {
if (!inherits(table, 'datatables'))
stop("Invalid table argument; a table object created from datatable() was expected")
x = table$x
if (x$filter != 'none') {
if (inherits(columns, 'formula')) columns = all.vars(columns)
colnames = base::attr(x, 'colnames', exact = TRUE)
rownames = base::attr(x, 'rownames', exact = TRUE)
if (is.null(params)) params = list()
cols = sprintf("%d", DT:::name2int(columns, colnames, rownames))
x$filterDateFmt = as.list(x$filterDateFmt)
for (col in cols) x$filterDateFmt[[col]] = list(
method = method, params = jsonlite::toJSON(params)
)
table$x = x
}
DT:::formatColumns(table, columns, tplDate2, method, params)
}
library(shiny)
library(DT)
server <- function(input, output) {
output$dt_table <- renderDT({
datatable(
iris,
options = list(
dom = 'lBfrtip',
buttons = list(
list(
extend = "copy",
exportOptions = list(orthogonal = "export")
),
list(
extend = "excel",
exportOptions = list(orthogonal = "export")
),
list(
extend = "pdf",
exportOptions = list(orthogonal = "export")
)
)
),
extensions = 'Buttons'
) %>%
formatString2(columns = 1, suffix = " meters")
})
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.