[英]R Shiny output dynamic number of tables
我正在編寫一個Shiny應用程序,以為數據集中的每個變量創建一個包含表的行。 變量的數量會因使用而異,並且理想情況下,應用程序將輸出與變量一樣多的行和表。 我當前的代碼正在創建正確數量的行和文本,但是正在為所有行的最后一個表重復表數據。 我認為,將表輸出存儲在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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.