DT和Shiny:使用过滤器在数据表中格式化数字

时间:2018-11-18 14:31:08

标签: r shiny dt

我有一个带有数据表的闪亮应用程序,我想做两件事:

  1. 我想在DTOutput的顶部添加过滤器
  2. 我想将表格中的数字格式化为百分比。

我只能做到其中之一。因此,如果仅使用过滤器(请参阅代码中的尝试3),则可以使用,但无法将数字格式化为百分比。如果我尝试格式化数字(请参阅代码中的attpemts#1和#2),则过滤器会消失,但数字格式正确。我还会在控制台中收到警告消息:

  

“ renderDataTable在expr产生数据表时忽略...参数   对象”

这对我没有多大帮助,因为我是Shiny和R的新手。

我找到了有关格式化数字或过滤表的教程并回答了问题,但显然我遗漏了一些东西……如果您可以引导我找到答案或发现下面的代码中的错误,我将非常感激。

可重现的app.R在这里:

library(shiny)
library(dplyr)
library(DT)

# Define UI 
ui <- fluidPage(
  actionButton("start", "Click to Start") 
  DTOutput('tbl1'),
  DTOutput('tbl2'),
  DTOutput('tbl3')
)

# Define Server
server = function(input, output) {

  #Attempt #1: gives me the formatted numbers but no filter.
  x <- eventReactive(input$start, iris %>% dplyr::filter(Species == "setosa") %>% datatable %>% formatPercentage(2:3, digits=2))
  output$tbl1<-  DT::renderDT(x(), filter="top")


  #Attempt #2: gives me the formatted numbers but no filter.
  y <- eventReactive(input$start, iris %>% dplyr::filter(Species == "setosa"))
  output$tbl2 <-  DT::renderDT(y() %>% datatable %>% formatPercentage(2:3, digits=2), filter="top")


  #Attempt #3: I get the filter, if I don't try to format the numbers
  z <- eventReactive(input$start, iris %>% dplyr::filter(Species == "setosa"))
  output$tbl3 <-  DT::renderDT(z(), filter="top")


}

# Run the application 
shinyApp(ui = ui, server = server)

1 个答案:

答案 0 :(得分:3)

似乎yo忘记了在第三次尝试中使用datatable()函数。这就是您需要的-

library(shiny)
library(dplyr)
library(DT)

# Define UI 
ui <- fluidPage(
  actionButton("start", "Click to Start"),
  DTOutput('tbl3')
)

# Define Server
server = function(input, output) {

  z <- eventReactive(input$start, {
    iris %>% dplyr::filter(Species == "setosa")
  })

  output$tbl3 <-  DT::renderDT({
    datatable(z(), filter="top") %>% 
      formatPercentage(2:3, digits=2)
  })     
}

# Run the application 
shinyApp(ui = ui, server = server)