R输出动态表数

R输出动态表数,r,shiny,R,Shiny,我正在编写一个闪亮的应用程序,为数据集中的每个变量创建一个包含表的行。变量的数量将随着使用的不同而变化,理想情况下,应用程序将输出尽可能多的行和表。我当前的代码正在创建正确数量的行和文本,但正在为所有行重复最后一个表的表数据。我认为在output[[tablename]]中存储表输出可能不适合创建单独存储的表。下一步是添加反应式输入,以过滤vardata$category显示的行 我需要做什么才能为每行中的表填充正确的数据 然后,我需要做什么来过滤哪些行显示为被动输入 这里的代码包括数据示例

我正在编写一个闪亮的应用程序,为数据集中的每个变量创建一个包含表的行。变量的数量将随着使用的不同而变化,理想情况下,应用程序将输出尽可能多的行和表。我当前的代码正在创建正确数量的行和文本,但正在为所有行重复最后一个表的表数据。我认为在
output[[tablename]]
中存储表输出可能不适合创建单独存储的表。下一步是添加反应式输入,以过滤
vardata$category
显示的行

  • 我需要做什么才能为每行中的表填充正确的数据
  • 然后,我需要做什么来过滤哪些行显示为被动输入
这里的代码包括数据示例:

library(shiny)    
variable <- c("Q17r01", "Q17r01", "Q17r01", "Q22r03", "Q22r03", "Q22r03", "Q15r01", "Q15r01", "Q15r01", "S03", "S03", "vAge", "vAge", "vAge", "vAge", "vAge", "vAge")
    responses <- c("A_T", "B_M", "C_B", "A_T", "B_M", "C_B", "A_T", "B_M", "C_B", "Female", "Male", "13 - 17", "18 - 24", "25 - 34", "35 - 44", "45 - 54", "55+")
    grp1 <- c(33, 39, 28, 27, 20, 53, 88, 7, 5, 51, 49, 27, 8, 33, 14, 16, 2)
    grp2 <- c(42, 46, 12,41, 45, 13, 64, 32, 4, 44, 56, 9, 22, 39, 13, 12, 4)
    xAgg <- c(32, 49, 19, 26, 48, 26, 51, 38, 11, 45, 55, 12, 16, 30, 17, 14, 11)
    chartdata <- data.frame(variable,responses,grp1,grp2,xAgg,row.names=NULL)

    profvars <- unique(variable)
    varlabel <- c("Q17r01_I_am_overwhelmed_by_the_number_of_apps_available_for_download", "Q22r03_I_feel_overwhelmed_by_the_number_of_digital_communications_I_receive",
                  "Q15r01_When_I_receive_a_message_online_I_tend_to_respond_right_away", "S03_Please_indicate_your_gender", "vAge_Age_breakdown")
    category <- c("a_Causes_of_Stress", "a_Causes_of_Stress", "a_Communication_Availability", "zz_Demo", "zz_Demo")
    vardata <- data.frame(profvars,varlabel,category,row.names=NULL)

    chartdatasplit <- split(chartdata, chartdata$variable)


    server <- function(input, output) {

    assigntables <- reactive({
      for (vars in profvars){
        local({
          var <- vars
          tablename <- paste0("table.",var)
          assign("tabledata",chartdatasplit[[var]],pos=1)  
          output[[tablename]] <- renderTable({tabledata}) ###appears this is only being done for last table
        })
      }
    })

      output$AllVars <- renderUI({
        ##for (i_var in 1:nrow(vardata)) {
        assigntables()
        return(apply(vardata,1,function(vars){
          fluidRow(column(12,offset=1,
            tableOutput(paste("table.",vars['profvars'],sep=''))),
            hr()
          )
        }))
      })
    }

    ui <- navbarPage("Seg Run",
                     tabPanel("Summary",
                              uiOutput("AllVars")
                     )
    )

    shinyApp(ui = ui, server = server)
库(闪亮)
变量我们开始:

library(shiny)
library(xtable)

variable <- c("Q17r01", "Q17r01", "Q17r01", "Q22r03", "Q22r03", "Q22r03", "Q15r01", "Q15r01", "Q15r01", "S03", "S03", "vAge", "vAge", "vAge", "vAge", "vAge", "vAge")
responses <- c("A_T", "B_M", "C_B", "A_T", "B_M", "C_B", "A_T", "B_M", "C_B", "Female", "Male", "13 - 17", "18 - 24", "25 - 34", "35 - 44", "45 - 54", "55+")
grp1 <- c(33, 39, 28, 27, 20, 53, 88, 7, 5, 51, 49, 27, 8, 33, 14, 16, 2)
grp2 <- c(42, 46, 12,41, 45, 13, 64, 32, 4, 44, 56, 9, 22, 39, 13, 12, 4)
xAgg <- c(32, 49, 19, 26, 48, 26, 51, 38, 11, 45, 55, 12, 16, 30, 17, 14, 11)
chartdata <- data.frame(variable,responses,grp1,grp2,xAgg,row.names=NULL)

profvars <- unique(variable)
varlabel <- c("Q17r01_I_am_overwhelmed_by_the_number_of_apps_available_for_download", "Q22r03_I_feel_overwhelmed_by_the_number_of_digital_communications_I_receive",
              "Q15r01_When_I_receive_a_message_online_I_tend_to_respond_right_away", "S03_Please_indicate_your_gender", "vAge_Age_breakdown")
category <- c("a_Causes_of_Stress", "a_Causes_of_Stress", "a_Communication_Availability", "zz_Demo", "zz_Demo")
vardata <- data.frame(profvars,varlabel,category,row.names=NULL)

chartdatasplit <- split(chartdata, chartdata$variable)


server <- function(input, output) {

  tableize <- function(chartdatasplit){  ###can add additional arguments like dimension - add to where this is called also and how tabledata indexes
    tables <- list()
    for (x in names(chartdatasplit)){ ##go through all individually stored variable data frames in chartdatasplit list
      tabledata <- chartdatasplit[[x]]  ###function that returns a dataframe to use in table
      tables[[as.character(x)]] <- 
        print(xtable(tabledata, caption=paste("Variable:",x)),
           type="html", include.rownames = FALSE,
           html.table.attributes='class="data table table-bordered table-condensed"',
           caption.placement="top")
    }
    return(lapply(tables,paste))    
  }

  output$tables <- renderUI({
    out <- unlist(tableize(chartdatasplit))
      return(div(HTML(out),class="shiny-html-output"))
  })
} 

ui <- shinyUI(fluidPage(

  uiOutput("tables")
))


shinyApp(ui = ui, server = server)
库(闪亮)
图书馆(xtable)

变量中有一个潜在的解决方案。不知道为什么shiny只坐最后一张桌子。可能是软件包的一个bug,请看我一直在查看该线程,并将查看是否可以将相同的解决方案应用于xtable,谢谢。请检查最近的回答:嘿,我一直在使用您的解决方案,但我正在通过反应式输入提供df子集,但当涉及到显示时,它显示了df中所有可能的变量,而不仅仅是子集中的变量,任何帮助都将不胜感激。