如何在 Shiny R 中添加反应式 for 循环?
Posted
技术标签:
【中文标题】如何在 Shiny R 中添加反应式 for 循环?【英文标题】:How to add a reactive for loop in Shiny R? 【发布时间】:2018-11-28 17:47:37 【问题描述】:我正在尝试使用 Shiny 创建仪表板。以下是一些示例数据:
###Creating Data
name <- c("Sharon", "Megan", "Kevin")
x <- c(5, 7,3)
y <- c(3,6,2)
z <- c(2,3,7)
jobForm = data.frame(name, x, y, z)
我想弄清楚的是,对于每一行名称,我如何创建自己的 TABLE?我相信有一种方法可以创建一个反应式 for 循环,但我已经做了很长时间并且已经放弃了。
以下是每个名称的仪表板外观的完整代码。此代码仅显示 Sharon 的分数,它应该运行。如果让代码完全运行有任何问题,请告诉我。
我正在使用
包闪亮、闪亮的仪表板和整洁
##Dashboard Header
header <- dashboardHeader(
title = "My Project")
##Dashboard Sidebar
sidebar <- dashboardSidebar(
sidebarMenu(
menuItem("Dashboard", icon = icon("dashboard"),tabName = "dashboard"),
menuItem("Job Positions", icon = icon("address-card"), tabName = "jobposition",
menuSubItem('Sales',
tabName = 'sales',
icon = icon('line-chart'))
)
)
)
##Dashboard Body
body <- dashboardBody(
tabItems(
# Dashboard Tab Content
tabItem(tabName = "dashboard",
fluidRow(
#Random Plot
box( )
)
),
# Associate Tab Content
tabItem(tabName = "sales",
fluidRow(
#Main Box for Candidate
box(
width = 8,
title = "Candidate 001",
status = "primary",
#Box for Table
box(
title = "Table",
status = "info",
tableOutput("stat1")
)
)
)
)
)
)
##User Interface Using Dashboard Function
ui <- dashboardPage(
skin = "yellow",
header,
sidebar,
body
)
##Server: Instructions
server <- function(input, output)
temp <- data.frame(jobForm %>%
slice(1) %>%
select(x:z))
temp <- as.data.frame(t(temp))
output$stat1 <-renderTable(
temp
,
include.rownames=TRUE,
colnames(temp)<-c("Score")
)
##Create Shiny App Object
shinyApp(ui, server)
感谢您的帮助
【问题讨论】:
dynamically add plots to web page using shiny的可能重复 【参考方案1】:你最好用 renderUI
解决这些问题,因为你永远不知道闪亮何时会评估一个表达式,你最好使用 lapply 然后 for 循环。
name <- c("Sharon", "Megan", "Kevin")
x <- c(5, 7,3)
y <- c(3,6,2)
z <- c(2,3,7)
jobForm = data.frame(name, x, y, z)
##Dashboard Header
header <- dashboardHeader(
title = "My Project")
##Dashboard Sidebar
sidebar <- dashboardSidebar(
sidebarMenu(
menuItem("Dashboard", icon = icon("dashboard"),tabName = "dashboard"),
menuItem("Job Positions", icon = icon("address-card"), tabName = "jobposition",
menuSubItem('Sales',
tabName = 'sales',
icon = icon('line-chart'))
)
)
)
##Dashboard Body
body <- dashboardBody(
tabItems(
# Dashboard Tab Content
tabItem(tabName = "dashboard",
fluidRow(
#Random Plot
box( )
)
),
# Associate Tab Content
tabItem(tabName = "sales",
fluidRow(
#Main Box for Candidate
uiOutput("candidates")
)
)
)
)
##User Interface Using Dashboard Function
ui <- dashboardPage(
skin = "yellow",
header,
sidebar,
body
)
##Server: Instructions
server <- function(input, output)
temp <- data.frame(jobForm %>%
slice(1) %>%
select(x:z))
temp <- as.data.frame(t(temp))
output$stat1 <-renderTable(
temp
,
include.rownames=TRUE,
colnames(temp)<-c("Score")
)
output$candidates <- renderUI(
tagList(
lapply(1:nrow(jobForm), function(idx)
output[[paste0("stat",idx)]] <- renderTable(
jobForm[idx,-1]
)
box(
width = 8,
title = paste0("Candidate: ",jobForm$name[idx]),
status = "primary",
#Box for Table
box(
title = "Table",
status = "info",
tableOutput(paste0("stat",idx))
)
)
)
)
)
##Create Shiny App Object
shinyApp(ui, server)
希望这会有所帮助!
【讨论】:
非常感谢! 我仍然想转置我的数据。我要在 renderUI 下添加该代码吗? 嗯,你应该把它放在 renderTable 表达式中,我这次把它放在了 renderUI 表达式中 - 但它不必在那里以上是关于如何在 Shiny R 中添加反应式 for 循环?的主要内容,如果未能解决你的问题,请参考以下文章
在 R Shiny 中,当链中的对象被隐藏时,如何维护反应链?
如何将 insertUI() 输出添加到 R Shiny 中的 renderText() 输出?