DT 表未以闪亮显示

Posted

技术标签:

【中文标题】DT 表未以闪亮显示【英文标题】:DT tables not shown in shiny 【发布时间】:2019-03-28 06:41:17 【问题描述】:

我有一个闪亮的应用程序,它打开一个简单的 .bat 文件,该文件在后台执行 R 和脚本 run.r。闪亮使用包DT 广泛地呈现所有表格。我遇到的问题是,如果我从 Rstudio 运行应用程序运行闪亮,它会显示所有表格,但如果我使用 .bat 文件执行闪亮,它只是不显示主题。我已经这样做了 4 次,这是第一次发生,我不知道问题所在。我在 CRAN 中有最新版本的 DT 的 pacakges,

所以我的server.r 是:

server <- function(input, output,session) 
  observeEvent(input$run,

TablasVaR <- function(mat,DT = T)
      mat_tbl <- data.frame(Activos = rownames(mat),Porcentaje = mat[,"Porcentaje"],
                            VaR = mat[,"Nivel"])

      tabla <- datatable(mat_tbl, escape = T,rownames = FALSE, 
                         selection = list(target = 'row'),
                         options = list(dom = 'tip', paging = TRUE))%>%
        formatStyle(1:ncol(mat_tbl),fontSize = '100%')%>%
        formatCurrency(3,digits = 0)%>%
        formatPercentage(2,digits = 1)
      if(DT)
        return(tabla)
       else
        return(mat_tbl)
      

    

    matr <- data.frame(Porcentaje=rnorm(19),Nivel = rnorm(19))



  output$table <- renderDataTable(TablasVaR(matr))
  )
  session$onSessionEnded(function() 
    stopApp()
  )  

ui.r

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(),
    wellPanel(style = "background-color: #ffffff;",
              bsButton("run","run1",block=F, style="default"),
              fluidRow(column(4,align="center",offset = 4,
                              dataTableOutput("table"))))
  ))

run.r 是:

librerias <- c("openxlsx","ggplot2","scales","rugarch","zoo","data.table","stringr",
               "DT","plotly","lubridate","knitr","gridExtra","grid","shinyBS",
               "rmarkdown","nloptr","shiny")
if(length(setdiff(librerias, rownames(installed.packages()))) > 0)
  install.packages(setdiff(librerias, rownames(installed.packages())))

invisible(sapply(librerias, require, character.only = TRUE))
CAMINO <<- "D:/Users/aandr/Documents/Ejemplo/"
runApp(CAMINO, launch.browser=TRUE)

.bat 文件包含:

"C:\Program Files\R\R-3.5.1\bin\R.exe" CMD BATCH "run.r"

如果我从run.r 运行闪亮的应用程序,DT 会显示,但如果我从 .bat 文件运行它就不会。 要使其运行,您需要将 server.r、ui.r、run.r 和 .bat 保存在同一文件夹中。

【问题讨论】:

如果没有可重现的东西,我们不希望提供帮助。你能在你的问题中添加一个有代表性但又小又闪亮的应用程序吗? @r2evans 刚刚添加了一个导致我的电脑出现问题的最小示例。 不错的 MWE,顺便说一句,它有所作为。 【参考方案1】:

如果您在Using DT in Shiny 上阅读 RStudio 的页面,您可能没有注意到

请注意,在 DT 中,DTOutput()dataTableOutput() 的别名,renderDT()renderDataTable() 的别名。建议您使用DTOutput()renderDT(),以避免可能与shinyshiny::dataTableOutput()shiny::renderDataTable())中的同名函数发生冲突。

碰撞,那是你的问题。确认一下,如果你看到这个:

find("dataTableOutput")
# [1] "package:DT"    "package:shiny"
find("renderDataTable")
# [1] "package:DT"    "package:shiny"

那么函数名冲突很可能是罪魁祸首。尝试用DT::dataTableOutput(...)DTOutput(...) 替换您的dataTableOutput(...);并将renderDataTable(...) 替换为DT::renderDataTable(...)renderDT(...)

【讨论】:

我以前没有见过DTOutput 函数,但这正是问题所在,所以由于某种原因它在 Rstudio 上工作很烦人,而在 R 控制台中却没有。谢谢 这是一个非常糟糕的冲突,尤其是当两个包都由同一组创作时。 (tidyverse 也受此困扰。)我的偏好一直是具体使用 DT::renderDataTable,但别名也可以正常工作。乐意效劳。 (我一直在考虑使用loadNamespace(...) 而不是library,部分原因是为了迫使我使用DT::。我还没有找到这个中断的地方,虽然我确定我错过了一些东西。顺便说一句:使用您的代码中的require 不正确:如果您不检查其返回值,请使用library。参考:***.com/a/51263513/3358272 我曾经在以前的闪亮应用程序中使用 DT:: 我现在不知道为什么我在这个应用程序中更改它但不会再这样做了。感谢您的`require``评论 现在冲突越来越常见,我真的很喜欢python的导入机制:import pkgnameforcespkgname.func,明确而清晰; import pkgname as pkg 允许走捷径,可以清晰且不那么不方便,希望 R 有这种机制。 一些更基本的东西,比如真正的警告(不是它当前显示的消息)会起作用。

以上是关于DT 表未以闪亮显示的主要内容,如果未能解决你的问题,请参考以下文章

基于正则表达式在闪亮的 DT 中突出显示单词

删除“显示 N 个条目中的 1 到 N 个”闪亮 DT

DT Table 中的闪亮小部件

根据不同数据集中的值格式化闪亮数据表 (DT) 的颜色

使用带闪亮的 Flexdashboard 时如何拥有可编辑的 DT 表?

renderTable和renderDataTable之间的R闪亮不同的输出