呈现datatable(使用formatStyle)时,仪表板闪亮且出现意外行为

呈现datatable(使用formatStyle)时,仪表板闪亮且出现意外行为,r,shiny,shinydashboard,dt,R,Shiny,Shinydashboard,Dt,我有一个R datatable,我正在使用Shiny将其渲染到仪表板中 我想根据另一列的值为列着色。根据示例,我可以根据每个单元格中的值为列着色: library(DT) options(DT.options = list(pageLength = 5)) df = as.data.frame(cbind(matrix(round(rnorm(50), 3), 10), sample(0:1, 10, TRUE))) # style V6 based on values of V6 datata

我有一个R datatable,我正在使用Shiny将其渲染到仪表板中

我想根据另一列的值为列着色。根据示例,我可以根据每个单元格中的值为列着色:

library(DT)
options(DT.options = list(pageLength = 5))
df = as.data.frame(cbind(matrix(round(rnorm(50), 3), 10), sample(0:1, 10, TRUE)))
# style V6 based on values of V6
datatable(df) %>% formatStyle(
  'V6',
  backgroundColor = styleEqual(c(0, 1), c('gray', 'yellow'))
)
根据单个列的值为其着色,效果与预期一致:

同一文档中的另一个示例声称允许我们根据列V6的值为列V1着色,并隐藏V6以避免显示(这正是我想要做的):

#隐藏V6
输出$table1%formatStyle(
‘V1’、‘V6’,
backgroundColor=styleEqual(c(0,1),c('gray','yellow'))
)
})
但是-当我在Shiny中使用renderDataTable并且看到一个没有颜色的列时,这不起作用(尽管它确实正确地隐藏了第V6列):


我进一步研究了一下,发现styleEqual忽略了我让它查看V6的事实,并试图将styleEqual约束应用于V1。如果我将此行更改为
backgroundColor=styleInterval(0,c('gray','yellow'))
则它将根据V1中的值为V1着色(而V6参数似乎完全被忽略)。

加载
ui.R
包后,您是否在
ui.R
server.R
文件中加载DT包?最近加载的哪个将屏蔽另一个库的
renderDataTable
/
dataTableOutput
函数。如果有任何疑问,请确保在这些函数前面加上
DT::
。据我所知,您的代码应该可以工作:当我在本地测试时,它运行良好。我使用
global.R
文件来加载包,但DT是在本地测试之后加载的。我对
ui.R
中的
框(DT::dataTableOutput(“table1”)
server.R
中的
DT::renderDataTable
都使用了(如上例所示)-还有其他地方应该包含前缀吗?作为一个极端的例子,我还尝试将
DT:
添加到renderDataTable,datatable,formatStyle和dataTableOutput。我还确保
DT
是最后一个加载的包。不走运!您可能正在使用旧的
CRAN版本0.1
。这些示例提到它们在dev版本上工作。然而,该软件包昨天刚刚更新为
v0.2
。因此,请将软件包更新到当前版本,然后再试一次。好吧,这个错误应该不再是可复制的,所以我很犹豫是否将其作为一个答案发布。
# hide V6
output$table1 <- DT::renderDataTable({

  datatable(df, options = list(
      columnDefs = list(list(targets = 6, visible = FALSE))
  )) %>% formatStyle(
    'V1', 'V6',
    backgroundColor = styleEqual(c(0, 1), c('gray', 'yellow'))
  )
})