首页 > 解决方案 > 强制 cell_clicked 从预先指定的列返回值

问题描述

在我的 Shiny App 中,我试图使用该包从表ADT中获取输入并使用它来过滤表B中的数据。但是,只有表A中第0 列的数据可用作过滤器值。因此,如果单击第 1 列,则表B中的输出为空。

那么我的问题是,是否可以强制cell_clicked后缀始终从单击的行返回第 0 列的值?本质上我想返回input$tabelA_cell-clicked$value列号等于 0 并且行号等于input$tabelA_cell_clicked$row

我在 serverscript 中尝试了以下操作(简化示例):

output$tabelA <- renderDataTable({datatable(Data_tabel_A)})

output$TabelB <- renderDataTable({datatable(Data_tabel_B %>%
                                 filter(variable1 == input$tabelA[input$tabelA_cell_clicked$row,0]))
})

但是,input$tabelA[input$tabelA_cell_clicked$row,0]似乎没有返回值。谁能指出我正确的方向?

标签: rshinydt

解决方案


跟进我的评论,因为您没有提供可重现的代码,所以这是一个使用iris数据集的简单演示 -

library(shiny)
library(DT)

shinyApp(
  ui = fluidPage(
    splitLayout(
      DTOutput("table_A"),
      DTOutput("table_B")
    )
  ),
  server = function(input, output, session) {

    # can be reactive
    table_A_data <- data.frame(Species = unique(iris$Species),
                               SomeColumn1 = letters[1:3],
                               SomeColumn2 = 1:3)

    output$table_A <- renderDT({
        datatable(table_A_data, selection = 'single')
    })

    output$table_B <- renderDT({
      req(input$table_A_rows_selected)
      # since I want to use only species value for filtering
      filter_val <- table_A_data$Species[input$table_A_rows_selected]
      iris %>%
        filter(Species == filter_val) %>%
        datatable()
    })
  }
)

推荐阅读