[英]DT tables not shown in shiny
我有一个闪亮的应用程序,它打开一个简单的 .bat 文件,该文件在后台执行 R 和脚本 run.r。 DT
广泛使用包DT
来呈现所有表格。 我遇到的问题是,如果我从 Rstudio run app 运行 Shiny,它会显示所有表格,但是如果我使用 .bat 文件执行 Shiny,它就不会显示主题。 我已经这样做了 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 保存在同一文件夹中。
如果您阅读了 RStudio 的在 Shiny 中使用 DT的页面,您可能没有注意到
请注意,在DT,
DTOutput()
是一个别名dataTableOutput()
和renderDT()
是一个别名renderDataTable()
建议您使用DTOutput()
和renderDT()
以避免闪亮名称相同的功能可能的碰撞(shiny::dataTableOutput()
和shiny::renderDataTable()
碰撞,那是你的问题。 确认一下,如果你看到这个:
find("dataTableOutput")
# [1] "package:DT" "package:shiny"
find("renderDataTable")
# [1] "package:DT" "package:shiny"
那么函数名冲突很可能是罪魁祸首。 尝试用DT::dataTableOutput(...)
或DTOutput(...)
替换你的dataTableOutput(...)
DTOutput(...)
; 并将renderDataTable(...)
替换为DT::renderDataTable(...)
或renderDT(...)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.