强制cell_clicked从预定列返回值

时间:2018-11-02 14:48:34

标签: r shiny dt

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

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

我已尝试在服务器脚本中进行以下操作(简化示例):

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]似乎没有返回值。有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

在我的评论之后,由于您未提供可复制的代码,因此以下是使用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()
    })
  }
)