从反应表中访问列名,以便使用DT包进行格式化

时间:2017-08-15 20:13:06

标签: r shiny dt

我正在尝试在闪亮的应用程序中格式化反应表并使用DT包显示它。有很多关于如何使用非反应表执行此操作的示例,例如:https://rstudio.github.io/DT/010-style.html。但是当我尝试以相同的方式使用反应函数的输出时,我得到列名称错误。这是一个例子:

library(shiny)
library(DT)


ui <- fluidPage(
  fluidRow(
    column(3,numericInput("nrows","Enter the number of rows",value=10)),
    column(9,DT::dataTableOutput("table"))
  )
)
server <- function(input, output, session) {

  cars2 <- reactive({
    cars <- datasets::cars
    cars2 <- cars[1:input$nrows,]
    return(cars2)
  })

  output$table <- DT::renderDataTable(cars2()%>% formatStyle( 'speed',backgroundColor = c('yellow')),options=list(pageLength=50))


}


shinyApp(ui=ui,server=server)

这是错误

Warning: Error in name2int: You specified the columns: speed, but the column names of the data are 
Stack trace (innermost first):
    94: name2int
    93: appendFormatter
    92: formatColumns
    91: formatStyle
    90: function_list[[k]]
    89: withVisible
    88: freduce
    87: _fseq
    86: eval
    85: eval
    84: withVisible
    83: %>%
    82: exprFunc
    81: widgetFunc
    80: func
    79: origRenderFunc
    78: renderFunc
    77: origRenderFunc
    76: output$table
     1: runApp

2 个答案:

答案 0 :(得分:1)

这有效:

server <- function(input, output, session) {

  cars2 <- reactive({

    cars <- datasets::cars
    cars2 <- cars[1:input$nrows,]
    return(cars2)

  })

  output$table <- renderDataTable({

    datatable(cars2(), options = list(pageLength = 50)) %>%
      formatStyle('speed', backgroundColor = 'yellow')

  })

}

答案 1 :(得分:0)

我有一个反应式数据框也有同样的问题。遵循 Sagar 建议的示例。我首先为数据帧构建了一个函数,然后尝试在输出中显示数据帧。同样的错误显示:警告:name2int 中的错误:您指定了列:基因探针,但数据的列名是

    g2wdataframefunction <- function() {
  return (gene2weight_table()$myg2wdata)
}

output$g2weightSummaryTable = DT::renderDataTable(
 DT::datatable(
  g2wdataframefunction() %>% formatStyle("Gene Probe", backgroundColor = 'lightblue'),
  rownames = TRUE,

... # 后面的行是无关紧要的