【问题标题】:formatCurrency in DT::renderDataTable when datatable has no columns当数据表没有列时,DT::renderDataTable 中的 formatCurrency
【发布时间】:2021-01-03 10:53:33
【问题描述】:

我在闪亮的应用程序中使用 renderDataTable 来显示 data.table vals$content4table 的内容,它是一个 reactiveValues。

vals$content4table 可能等于没有列的数据表。 在这种情况下,我在使用 formatCurrency 时出错,因为它搜索不存在的列。 有没有办法检查数据表是否有带有ifelse的列以避免错误?

这是我服务器的一段代码。

#initialising vals$content4table when launching the app
 vals <- reactiveValues(content4table = if(someBoolean) {data.table(NULL)} else {data.table("Column1" = "whatever","Currency" = 1000}
  )
 
output$TableInUI <- DT::renderDataTable(datatable(vals$content4table) %>% ifelse(nrow(vals$content4table)>0,formatCurrency(2, currency = "", interval = 3, mark = ",",  digits = 0),fnothing()))

#where fnothing is defined as
fnothing<-function(df) return(df)

上面的代码不起作用并给出了这个错误: 警告:ifelse 中的错误:未使用的参数 (fnothing())

【问题讨论】:

    标签: html r shiny dt format-currency


    【解决方案1】:

    你可以使用req:

    output$TableInUI <- DT::renderDataTable({
       req(isTRUE(ncol(vals$content4table)>0))
       vals$content4table
    })
    

    【讨论】:

    • 这个解决方案完全跳过了实际问题所在的 formatCurrency 问题。在没有列或没有行的情况下,数据表根本不会显示,这很好。
    • @Mario,我应该理解它解决了问题还是没有解决正确的问题?
    • 你没有。添加行 req(isTRUE(ncol(vals$content4table)>0)) 后,无论 vals$content4table 有多少列或行数,该工具都会立即崩溃。
    • 这很令人惊讶,因为req 通常工作正常,而isTRUE(ncol(data.table::data.table(NULL)) &gt; 0) 返回 FALSE。
    猜你喜欢
    • 2016-12-17
    • 2015-08-28
    • 2016-01-02
    • 2020-09-18
    • 2018-10-08
    • 2018-08-07
    • 2016-06-15
    • 2018-10-06
    • 2021-07-30
    相关资源
    最近更新 更多