Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中设置多个表的条件格式_R_Shiny_Formatting_Conditional - Fatal编程技术网

在R中设置多个表的条件格式

在R中设置多个表的条件格式,r,shiny,formatting,conditional,R,Shiny,Formatting,Conditional,我正在R中构建一个闪亮的应用程序来显示多个数据帧,在一个闪亮的页面上总共显示6个数据帧。我可以有条件地格式化Shining中的1个数据表,但无法有条件地格式化所有6个表。6个表中的每个表都有5个变量,我希望每个数据表中都有第二个变量:如果>=75,背景灯亮起红色和粗体,如果则亮起绿色和粗体。我已经尝试了您的代码,它对我很有效,请看下面: library(shiny) library(DT) ui <- fluidPage( titlePanel("xxx"), title = 'x

我正在R中构建一个闪亮的应用程序来显示多个数据帧,在一个闪亮的页面上总共显示6个数据帧。我可以有条件地格式化Shining中的1个数据表,但无法有条件地格式化所有6个表。6个表中的每个表都有5个变量,我希望每个数据表中都有第二个变量:如果>=75,背景灯亮起红色和粗体,如果则亮起绿色和粗体。我已经尝试了您的代码,它对我很有效,请看下面:

library(shiny)
library(DT)
ui <- fluidPage(
  titlePanel("xxx"),
  title = 'xx',
  fluidRow(
    column(12 
           , fluidRow(
             column(6, DT::dataTableOutput('Table1'), style = "font-size: 
                    75%; width: 50%"),
             column(6, DT::dataTableOutput('Table2'), style = "font-size: 
                    75%; width: 50%")
             ),
           # hr(),
           fluidRow(
             column(6, DT::dataTableOutput('Table3'), style = "font-size: 
                    75%; width: 50%"),
             column(6, DT::dataTableOutput('Table4'), style = "font-size: 
                    75%; width: 50%")
             ),
           # hr(),
           fluidRow(
             column(6, DT::dataTableOutput('Table5'), style = "font-size: 
                    75%; width: 50%"),
             column(6, DT::dataTableOutput('Table6'), style = "font-size: 
                    75%; width: 50%")
             )
             )))
    server <- function(input, output) {
      output$Table1 = DT::renderDataTable(mtcars
                                     , server = FALSE, selection = 'single'
                                     , options = list(rowCallback = JS('function(nRow
                                                                       , aData, iDisplayIndex, iDisplayIndexFull) {
                                                                       // Bold and green cells for conditions
                                                                       if (parseFloat(aData[2]) 
                                                                       >= 1 | parseFloat(aData[2]) <= 3)
                                                                       $("td:eq(2)", nRow).css("font-weight", "bold");
                                                                       if (parseFloat(aData[2]) >= 1)
                                                                       $("td:eq(2)", nRow).css("background-color"
                                                                       , "#FF0000");
                                                                       else if(parseFloat(aData[2]) <= 3)
                                                                       $("td:eq(2)", nRow).css("background-color", 
                                                                       "#00FF00");
                                                                       else 
                                                                       $("td:eq(2)", nRow).css("background-color"
                                                                       , "#FFFFFF");
                                                                       }'
                                    )))

      output$Table2 = DT::renderDataTable(iris, server = FALSE, 
                                     selection = 'single', options = list(rowCallback = JS('function(nRow
                                                                       , aData, iDisplayIndex, iDisplayIndexFull) {
                                                                                           // Bold and green cells for conditions
                                                                                           if (parseFloat(aData[2]) 
                                                                                           >= 1 | parseFloat(aData[2]) <= 3)
                                                                                           $("td:eq(2)", nRow).css("font-weight", "bold");
                                                                                           if (parseFloat(aData[2]) >= 1)
                                                                                           $("td:eq(2)", nRow).css("background-color"
                                                                                           , "#FF0000");
                                                                                           else if(parseFloat(aData[2]) <= 3)
                                                                                           $("td:eq(2)", nRow).css("background-color", 
                                                                                           "#00FF00");
                                                                                           else 
                                                                                           $("td:eq(2)", nRow).css("background-color"
                                                                                           , "#FFFFFF");
    }'
                                    )))
      output$Table3 = DT::renderDataTable(iris, server = FALSE, 
                                     selection = 'single', options = list(rowCallback = JS('function(nRow
                                                                       , aData, iDisplayIndex, iDisplayIndexFull) {
                                                                                           // Bold and green cells for conditions
                                                                                           if (parseFloat(aData[2]) 
                                                                                           >= 1 | parseFloat(aData[2]) <= 3)
                                                                                           $("td:eq(2)", nRow).css("font-weight", "bold");
                                                                                           if (parseFloat(aData[2]) >= 1)
                                                                                           $("td:eq(2)", nRow).css("background-color"
                                                                                           , "#FF0000");
                                                                                           else if(parseFloat(aData[2]) <= 3)
                                                                                           $("td:eq(2)", nRow).css("background-color", 
                                                                                           "#00FF00");
                                                                                           else 
                                                                                           $("td:eq(2)", nRow).css("background-color"
                                                                                           , "#FFFFFF");
    }'
                                    )))
      output$Table4 = DT::renderDataTable(iris, server = FALSE, 
                                     selection = 'single', options = list(rowCallback = JS('function(nRow
                                                                       , aData, iDisplayIndex, iDisplayIndexFull) {
                                                                       // Bold and green cells for conditions
                                                                       if (parseFloat(aData[2]) 
                                                                       >= 1 | parseFloat(aData[2]) <= 3)
                                                                       $("td:eq(2)", nRow).css("font-weight", "bold");
                                                                       if (parseFloat(aData[2]) >= 1)
                                                                       $("td:eq(2)", nRow).css("background-color"
                                                                       , "#FF0000");
                                                                       else if(parseFloat(aData[2]) <= 3)
                                                                       $("td:eq(2)", nRow).css("background-color", 
                                                                       "#00FF00");
                                                                       else 
                                                                       $("td:eq(2)", nRow).css("background-color"
                                                                       , "#FFFFFF");
                                                                       }'
                                     )))
      output$Table5 = DT::renderDataTable(iris, server = FALSE, 
                                     selection = 'single', options = list(rowCallback = JS('function(nRow
                                                                       , aData, iDisplayIndex, iDisplayIndexFull) {
                                                                                           // Bold and green cells for conditions
                                                                                           if (parseFloat(aData[2]) 
                                                                                           >= 1 | parseFloat(aData[2]) <= 3)
                                                                                           $("td:eq(2)", nRow).css("font-weight", "bold");
                                                                                           if (parseFloat(aData[2]) >= 1)
                                                                                           $("td:eq(2)", nRow).css("background-color"
                                                                                           , "#FF0000");
                                                                                           else if(parseFloat(aData[2]) <= 3)
                                                                                           $("td:eq(2)", nRow).css("background-color", 
                                                                                           "#00FF00");
                                                                                           else 
                                                                                           $("td:eq(2)", nRow).css("background-color"
                                                                                           , "#FFFFFF");
    }'
                                    )))
      output$Table6 = DT::renderDataTable(iris, server = FALSE, 
                                     selection = 'single', options = list(rowCallback = JS('function(nRow
                                                                       , aData, iDisplayIndex, iDisplayIndexFull) {
                                                                                           // Bold and green cells for conditions
                                                                                           if (parseFloat(aData[2]) 
                                                                                           >= 1 | parseFloat(aData[2]) <= 3)
                                                                                           $("td:eq(2)", nRow).css("font-weight", "bold");
                                                                                           if (parseFloat(aData[2]) >= 1)
                                                                                           $("td:eq(2)", nRow).css("background-color"
                                                                                           , "#FF0000");
                                                                                           else if(parseFloat(aData[2]) <= 3)
                                                                                           $("td:eq(2)", nRow).css("background-color", 
                                                                                           "#00FF00");
                                                                                           else 
                                                                                           $("td:eq(2)", nRow).css("background-color"
                                                                                           , "#FFFFFF");
    }'
                                    )))}
shinyApp(ui, server)

请详细说明出现了什么样的问题。您的语句“我无法有条件地格式化所有6个表”太模糊。当我运行此代码时,它对输出$1适用于有条件地格式化列2,当我尝试将相同的代码添加到输出$2时,没有任何更改。输出$1在第2列中保留条件格式,但输出$2没有条件格式。我需要有条件地格式化第2列中的所有6个数据帧。感谢您的帮助。首先,您不应该将数据表Id命名为数字,而应该命名为:表1、表2……非常感谢。我宁愿使用formatStyle(),我就是无法让它工作。任何建议都会非常有用。非常感谢。我的代码现在可以工作了,但是,我宁愿使用formatsyle。另外,若我想创建一个绘图,那个么若我在6个数据表中的任何一个表中“点击”,绘图就会出现数据。
library(shiny)
library(DT)
ui <- fluidPage(
  titlePanel("xxx"),
  title = 'xx',
  fluidRow(
    column(12 
           , fluidRow(
             column(6, DT::dataTableOutput('Table1'), style = "font-size: 
                    75%; width: 50%"),
             column(6, DT::dataTableOutput('Table2'), style = "font-size: 
                    75%; width: 50%")
             ),
           # hr(),
           fluidRow(
             column(6, DT::dataTableOutput('Table3'), style = "font-size: 
                    75%; width: 50%"),
             column(6, DT::dataTableOutput('Table4'), style = "font-size: 
                    75%; width: 50%")
             ),
           # hr(),
           fluidRow(
             column(6, DT::dataTableOutput('Table5'), style = "font-size: 
                    75%; width: 50%"),
             column(6, DT::dataTableOutput('Table6'), style = "font-size: 
                    75%; width: 50%")
             )
             )))
    server <- function(input, output) {
      output$Table1 = DT::renderDataTable(mtcars
                                     , server = FALSE, selection = 'single'
                                     , options = list(rowCallback = JS('function(nRow
                                                                       , aData, iDisplayIndex, iDisplayIndexFull) {
                                                                       // Bold and green cells for conditions
                                                                       if (parseFloat(aData[2]) 
                                                                       >= 1 | parseFloat(aData[2]) <= 3)
                                                                       $("td:eq(2)", nRow).css("font-weight", "bold");
                                                                       if (parseFloat(aData[2]) >= 1)
                                                                       $("td:eq(2)", nRow).css("background-color"
                                                                       , "#FF0000");
                                                                       else if(parseFloat(aData[2]) <= 3)
                                                                       $("td:eq(2)", nRow).css("background-color", 
                                                                       "#00FF00");
                                                                       else 
                                                                       $("td:eq(2)", nRow).css("background-color"
                                                                       , "#FFFFFF");
                                                                       }'
                                    )))

      output$Table2 = DT::renderDataTable(iris, server = FALSE, 
                                     selection = 'single', options = list(rowCallback = JS('function(nRow
                                                                       , aData, iDisplayIndex, iDisplayIndexFull) {
                                                                                           // Bold and green cells for conditions
                                                                                           if (parseFloat(aData[2]) 
                                                                                           >= 1 | parseFloat(aData[2]) <= 3)
                                                                                           $("td:eq(2)", nRow).css("font-weight", "bold");
                                                                                           if (parseFloat(aData[2]) >= 1)
                                                                                           $("td:eq(2)", nRow).css("background-color"
                                                                                           , "#FF0000");
                                                                                           else if(parseFloat(aData[2]) <= 3)
                                                                                           $("td:eq(2)", nRow).css("background-color", 
                                                                                           "#00FF00");
                                                                                           else 
                                                                                           $("td:eq(2)", nRow).css("background-color"
                                                                                           , "#FFFFFF");
    }'
                                    )))
      output$Table3 = DT::renderDataTable(iris, server = FALSE, 
                                     selection = 'single', options = list(rowCallback = JS('function(nRow
                                                                       , aData, iDisplayIndex, iDisplayIndexFull) {
                                                                                           // Bold and green cells for conditions
                                                                                           if (parseFloat(aData[2]) 
                                                                                           >= 1 | parseFloat(aData[2]) <= 3)
                                                                                           $("td:eq(2)", nRow).css("font-weight", "bold");
                                                                                           if (parseFloat(aData[2]) >= 1)
                                                                                           $("td:eq(2)", nRow).css("background-color"
                                                                                           , "#FF0000");
                                                                                           else if(parseFloat(aData[2]) <= 3)
                                                                                           $("td:eq(2)", nRow).css("background-color", 
                                                                                           "#00FF00");
                                                                                           else 
                                                                                           $("td:eq(2)", nRow).css("background-color"
                                                                                           , "#FFFFFF");
    }'
                                    )))
      output$Table4 = DT::renderDataTable(iris, server = FALSE, 
                                     selection = 'single', options = list(rowCallback = JS('function(nRow
                                                                       , aData, iDisplayIndex, iDisplayIndexFull) {
                                                                       // Bold and green cells for conditions
                                                                       if (parseFloat(aData[2]) 
                                                                       >= 1 | parseFloat(aData[2]) <= 3)
                                                                       $("td:eq(2)", nRow).css("font-weight", "bold");
                                                                       if (parseFloat(aData[2]) >= 1)
                                                                       $("td:eq(2)", nRow).css("background-color"
                                                                       , "#FF0000");
                                                                       else if(parseFloat(aData[2]) <= 3)
                                                                       $("td:eq(2)", nRow).css("background-color", 
                                                                       "#00FF00");
                                                                       else 
                                                                       $("td:eq(2)", nRow).css("background-color"
                                                                       , "#FFFFFF");
                                                                       }'
                                     )))
      output$Table5 = DT::renderDataTable(iris, server = FALSE, 
                                     selection = 'single', options = list(rowCallback = JS('function(nRow
                                                                       , aData, iDisplayIndex, iDisplayIndexFull) {
                                                                                           // Bold and green cells for conditions
                                                                                           if (parseFloat(aData[2]) 
                                                                                           >= 1 | parseFloat(aData[2]) <= 3)
                                                                                           $("td:eq(2)", nRow).css("font-weight", "bold");
                                                                                           if (parseFloat(aData[2]) >= 1)
                                                                                           $("td:eq(2)", nRow).css("background-color"
                                                                                           , "#FF0000");
                                                                                           else if(parseFloat(aData[2]) <= 3)
                                                                                           $("td:eq(2)", nRow).css("background-color", 
                                                                                           "#00FF00");
                                                                                           else 
                                                                                           $("td:eq(2)", nRow).css("background-color"
                                                                                           , "#FFFFFF");
    }'
                                    )))
      output$Table6 = DT::renderDataTable(iris, server = FALSE, 
                                     selection = 'single', options = list(rowCallback = JS('function(nRow
                                                                       , aData, iDisplayIndex, iDisplayIndexFull) {
                                                                                           // Bold and green cells for conditions
                                                                                           if (parseFloat(aData[2]) 
                                                                                           >= 1 | parseFloat(aData[2]) <= 3)
                                                                                           $("td:eq(2)", nRow).css("font-weight", "bold");
                                                                                           if (parseFloat(aData[2]) >= 1)
                                                                                           $("td:eq(2)", nRow).css("background-color"
                                                                                           , "#FF0000");
                                                                                           else if(parseFloat(aData[2]) <= 3)
                                                                                           $("td:eq(2)", nRow).css("background-color", 
                                                                                           "#00FF00");
                                                                                           else 
                                                                                           $("td:eq(2)", nRow).css("background-color"
                                                                                           , "#FFFFFF");
    }'
                                    )))}
shinyApp(ui, server)
library(shiny)
library(DT)
ui <- fluidPage(
  titlePanel("xxx"),
  title = 'xx',
  fluidRow(
    column(12 
           , fluidRow(
             column(6, DT::dataTableOutput('Table1'), style = "font-size: 
                    75%; width: 50%"),
             column(6, DT::dataTableOutput('Table2'), style = "font-size: 
                    75%; width: 50%")
             ),
           # hr(),
           fluidRow(
             column(6, DT::dataTableOutput('Table3'), style = "font-size: 
                    75%; width: 50%"),
             column(6, DT::dataTableOutput('Table4'), style = "font-size: 
                    75%; width: 50%")
             ),
           # hr(),
           fluidRow(
             column(6, DT::dataTableOutput('Table5'), style = "font-size: 
                    75%; width: 50%"),
             column(6, DT::dataTableOutput('Table6'), style = "font-size: 
                    75%; width: 50%")
             )
             )))
server <- function(input, output) {
  output$Table1 = DT::renderDataTable(
    datatable(mtcars) %>% 
      formatStyle('cyl', fontWeight = styleInterval(4, c('normal', 'bold')), # Font bold if cyl > 4
                  backgroundColor = styleInterval(4, c('green', 'red'))) # Red background if cyl > 4
  )

}
shinyApp(ui, server)