DT数据表在shiny中不显示。
DT数据表在shiny中不显示。
我有一个闪亮的App,它使用简单的.Bat文件打开,该文件在后台执行R和run.r脚本。这个App广泛使用包DT渲染所有表格。我遇到的问题是,如果我从RStudio运行App,则可以显示所有表格,但如果我使用.bat文件执行App,则无法显示它们。我已经做了4次,这是第一次发生这种情况,我不知道问题出在哪里。我拥有CRAN中可用的DT包最新版本的包。
所以我的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运行App,DT就会显示,但如果我从.bat文件运行它,则不能显示。
要使其运行,您需要将server.r、ui.r、run.r和.bat保存在同一个文件夹中。
admin 更改状态以发布 2023年5月22日
如果您阅读过RStudio有关在Shiny中使用DT的页面Using DT in Shiny,您可能没有注意到
请注意,在DT中,
DTOutput()
是dataTableOutput()
的别名,renderDT()
是renderDataTable()
的别名。建议您使用DTOutput()
和renderDT()
,以避免与shiny中同名函数(shiny::dataTableOutput()
和shiny::renderDataTable()
)可能发生的冲突。
冲突,这是您的问题。确认一下,如果您看到了这个:
find("dataTableOutput") # [1] "package:DT" "package:shiny" find("renderDataTable") # [1] "package:DT" "package:shiny"
那么函数名冲突可能是原因。尝试用DT::dataTableOutput(...)
或DTOutput(...)
替换您的dataTableOutput(...)
,并用DT::renderDataTable(...)
或renderDT(...)
替换renderDataTable(...)
。