R有光泽;全局定义渲染中的NA行为

时间:2019-03-09 04:56:34

标签: r shiny na

在制作包含许多包含某些NA值的表的Shiny应用程序时,全局定义如何通过renderTable打印NA可能会有所帮助。

举个例子:

library(shiny)
ui <- fluidPage(
  column(2,uiOutput("ourTable")),
  column(2,uiOutput("ourTable2"))
)

server <- function(input, output) {
  data<-data.frame(A=1:6, B=LETTERS[11:16], C=c(1,2,"A", "B", NA, NA))
  output$ourTable<-renderTable({data})
  output$ourTable2<-renderTable({data}, na="")
}

shinyApp(ui = ui, server = server)

呈现如下:

enter image description here

理想情况下,我想添加一行代码(在服务器中或在ui中),以便所有表都呈现为ourTable2,即在输出中不打印NA和不必为我添加的每个表都明确指定它。

2 个答案:

答案 0 :(得分:1)

如果愿意,可以在global.R文件(或server.R文件)中定义以下内容。这将对您的表起作用,如果整个表都为NA,则返回“”。如果传递复杂的对象(例如列表的嵌入式列表),则需要更加复杂。但是,可以像在OP中一样打印data.frame。

global.R(或其他位置)中的

^

在您的server.r(或UI模块或需要的地方)

exec master..xp_cmdshell 'bcp " Select 'column' union all Select "
        cast(column  As nvarchar(max))from [NEWDATABASE].[dbo].[TempPower] WHERE BarCode = 'batman'"queryout D:\TempPower.xls -o "D:\querycommanddetails.txt" -T -c -C RAW'"

一个通用示例:

format.NAs <- function(x) {
  if (identical(x,NA)) return ("")
  x <- as.data.frame(lapply(df,unclass)) #to accommodate factors()
  x[is.na(x)] <- ""
  return (x)
}

答案 1 :(得分:0)

每个里卡多(Ricardo)的comment under my question我写了以下包装程序,该包装程序对所有呈现的表都有效(但不是其他输出表的方式):

renderTableNew<-function(x){renderTable({x}, na="")}

很显然,此“技巧”可以用于定义renderTable()的更多参数,并且可以使用不同的参数创建多个此类函数。使用此功能时,唯一需要警惕的是您必须使用renderTableNew()而不是renderTable