将输出ID分配给有光泽的lapply中的renderdataTable()对象

时间:2018-01-17 13:08:22

标签: r shiny

我有一个列表,其中包含几个相同格式的data.frames,这些data.frames我想制作一个tablist,将每个data.frame显示为一个DT :: datatable,并在其中显示一个下面,以下代码工作正常:

createTabs <- function(df) {
    tabPanel(
             renderDataTable(df),
             renderPlotly(volcano_plot(df))
    )}

myTabs <- lapply(myList, createTabs)
return(do.call(tabsetPanel,myTabs))

然而,这种方式我没有为每个renderDataTable对象分配输出ID,稍后如果我想让用户选择的行在数据表中进行一些统计,就像在这个中一样

How do I get the data from the selected rows of a filtered datatable (DT)?

这是不可能的,因为我无法获得这些数据表的输出id,我想知道当我使用renderDataTable()创建时,是否有为每个数据表分配输出ID的方法已经或者还有其他方式吗?欢迎任何想法!

1 个答案:

答案 0 :(得分:1)

您可以先构造输出对象(以便命名它们),然后在创建service.ranking:Integer时调用它们。工作示例:

tabsetPanel

现在您也可以调用他们选择的行,因为数据表已命名。如果library(shiny) library(plotly) ui <- fluidPage( uiOutput('my_tabsetpanel') ) server <- function(input, output, session) { myList = list('dt_1'= head(mtcars,5), 'dt_2' = head(mtcars,5), 'dt_3'= head(mtcars,5)) # create the tables lapply(seq_along(myList),function(x) { output[[names(myList)[x]]] = renderDataTable({myList[[x]]}) }) # create the plots lapply(seq_along(myList),function(x) { output[[paste0(names(myList)[x],'_plot')]] = renderPlotly({plot_ly(myList[[x]],x=~mpg,y=~cyl)}) }) # create tabsetPanel output$my_tabsetpanel <- renderUI({ myTabs = lapply(seq_along(myList), function(x) { tabPanel(paste0('mytab',x), dataTableOutput(names(myList)[x]), plotlyOutput(paste0(names(myList)[x],'_plot')))} ) do.call(tabsetPanel, myTabs) }) } shinyApp(ui, server) 实际上是被动的,则应在MyList两个observer语句周围包含lapply。希望这有帮助!