r - DT 数据表中单元格选择期间的行为不一致
问题描述
我在下面有一个闪亮的应用程序,其中用户单击上表中的一个单元格,相关单元格应显示在下表中。问题是,当我取消选择上部的单元格时,下部的单元格不仅保留下来,而且变得更多。
library(shiny)
library(DT)
data("mtcars")
ui <- shinyUI(
fluidRow(
DT::dataTableOutput("myDatatable"),
DT::dataTableOutput("myDatatable2")
)
)
server <- shinyServer(function(input, output, session) {
dat1 <- reactive({
matrix(iris[,5])
})
list_all <- reactiveVal(character())
observeEvent(input$myDatatable_cell_clicked, {
list_all(append(list_all(), input$myDatatable_cell_clicked$value))
})
output$myDatatable <- DT::renderDataTable(dat1(),
selection=list( target="cell"),
server = FALSE,
rownames=FALSE)
output$myDatatable2 <- DT::renderDataTable(matrix(list_all()),
selection="none",
server = FALSE,
rownames=FALSE)
})
shinyApp(ui, server)
解决方案
请尝试以下:
library(shiny)
library(DT)
data("mtcars")
ui <- shinyUI(
fluidRow(
DT::dataTableOutput("myDatatable"),
DT::dataTableOutput("myDatatable2")
)
)
server <- shinyServer(function(input, output, session) {
dat1 <- reactive({
matrix(iris[,5])
})
list_all <- reactiveVal(character())
observeEvent(input$myDatatable_cells_selected, {
if (nrow(input$myDatatable_cells_selected) == 0) {
list_all(character())
} else {
list_all(dat1()[input$myDatatable_cells_selected[,1]])
}
})
output$myDatatable <- DT::renderDataTable(dat1(),
selection=list( target="cell"),
server = FALSE,
rownames=FALSE)
output$myDatatable2 <- DT::renderDataTable(matrix(list_all()),
selection="none",
server = FALSE,
rownames=FALSE)
})
shinyApp(ui, server)
主要区别在于使用input$myDatatable_cells_selected
which 保留当前选定的单元格,而不是input$myDatatable_cell_clicked
包含单击的单元格,即使未选中,也会导致您的问题。
推荐阅读
- javascript - 使用 Google Cloud Functions 从实时数据库中删除元素
- r - 从另一个矩阵中查找值
- r - 从r中的长刺中提取朋友ID
- ansible - 在ansible中的库存字符串之后在文件中附加一行?
- tabulator - 如何更改制表符分页按钮的文本和位置
- python-3.x - 问题酸洗函数的参数,包括使用 python pickle 模块的 datetime
- java - 将两个具有相同元素但不同数据的列表与所有数据合并到一个列表中?
- unity3d - 使用 Canvas 时 UiButton 的大小不正确
- sql - 在 queryExecute() 中使用 REGXP_LIKE
- visual-studio-code - 代号 与 VSCode 一起使用