在 R Shiny 中,如何在服务器函数上创建多个 `outputs$...`
In R Shiny , how to create multiples `outputs$...` on server function
我有这个向量:vec<-c(2,13,56,8,10,11,19)
我需要的输出应该是这样的:
server <- function(input, output, session) {
vec<-c(2,13,56,8,10,11,19)
output$report_2 <- renderUI({
...
x <- 2
})
output$report_13 <- renderUI({
...
x <- 13
})
output$report_56 <- renderUI({
...
x <- 56
})
output$report_8 <- renderUI({
...
x <- 8
})
output$report_10 <- renderUI({
...
x <- 10
})
output$report_11 <- renderUI({
...
x <- 11
})
output$report_19 <- renderUI({
...
x <- 19
})
}
但我需要使用 map
,也许 glue
。但是我不能
换句话说,对于每个 k 数字,我需要创建一个这样的函数,并使其在闪亮的情况下工作:
output$report_k <- renderUI({
...
x <- k
})
有什么帮助吗?
非常感谢
在模块之前,我们将 textOutput
和 output[[...]] <- renderSomething
包装在 lapply
:
中
library(shiny)
vec <- c(2,13,56,8,10,11,19)
shinyApp(ui = fluidPage(
lapply(vec, function(x) textOutput(paste0("report_", x)))
),
server = function(input, output, session) {
lapply(vec, function(x){
output[[paste0("report_", x)]] <-
renderText({
x
})
})
})
以上仪表板是以下的简短版本:
library(shiny)
shinyApp(ui = fluidPage(
textOutput("report_2"),
textOutput("report_13"),
textOutput("report_56"),
textOutput("report_8"),
textOutput("report_10"),
textOutput("report_11"),
textOutput("report_19"),
),
server = function(input, output, session) {
vec<-c(2,13,56,8,10,11,19)
output$report_2 <- renderText({
2
})
output$report_13 <- renderText({
13
})
output$report_56 <- renderText({
56
})
output$report_8 <- renderText({
8
})
output$report_10 <- renderText({
10
})
output$report_11 <- renderText({
11
})
output$report_19 <- renderText({
19
})
})
有了模块,我们可以创建一个模块并用 lapply
调用它。我会说这是推荐的方式。
library(shiny)
myModuleUI <- function(id) {
tagList(
textOutput(NS(id, "text"))
)
}
myModuleServer <- function(id, val) {
moduleServer(id, function(input, output, session) {
output$text <- renderText({
val
})
})
}
vec <- c(2,13,56,8,10,11,19)
shinyApp(ui = fluidPage(
lapply(vec, FUN = function(x) myModuleUI(paste0("report_", x)))
),
server = function(input, output, session) {
lapply(vec, FUN = function(x) {
myModuleServer(id = paste0("report_", x),
val = x)
})
})
我有这个向量:vec<-c(2,13,56,8,10,11,19)
我需要的输出应该是这样的:
server <- function(input, output, session) {
vec<-c(2,13,56,8,10,11,19)
output$report_2 <- renderUI({
...
x <- 2
})
output$report_13 <- renderUI({
...
x <- 13
})
output$report_56 <- renderUI({
...
x <- 56
})
output$report_8 <- renderUI({
...
x <- 8
})
output$report_10 <- renderUI({
...
x <- 10
})
output$report_11 <- renderUI({
...
x <- 11
})
output$report_19 <- renderUI({
...
x <- 19
})
}
但我需要使用 map
,也许 glue
。但是我不能
换句话说,对于每个 k 数字,我需要创建一个这样的函数,并使其在闪亮的情况下工作:
output$report_k <- renderUI({
...
x <- k
})
有什么帮助吗?
非常感谢
在模块之前,我们将 textOutput
和 output[[...]] <- renderSomething
包装在 lapply
:
library(shiny)
vec <- c(2,13,56,8,10,11,19)
shinyApp(ui = fluidPage(
lapply(vec, function(x) textOutput(paste0("report_", x)))
),
server = function(input, output, session) {
lapply(vec, function(x){
output[[paste0("report_", x)]] <-
renderText({
x
})
})
})
以上仪表板是以下的简短版本:
library(shiny)
shinyApp(ui = fluidPage(
textOutput("report_2"),
textOutput("report_13"),
textOutput("report_56"),
textOutput("report_8"),
textOutput("report_10"),
textOutput("report_11"),
textOutput("report_19"),
),
server = function(input, output, session) {
vec<-c(2,13,56,8,10,11,19)
output$report_2 <- renderText({
2
})
output$report_13 <- renderText({
13
})
output$report_56 <- renderText({
56
})
output$report_8 <- renderText({
8
})
output$report_10 <- renderText({
10
})
output$report_11 <- renderText({
11
})
output$report_19 <- renderText({
19
})
})
有了模块,我们可以创建一个模块并用 lapply
调用它。我会说这是推荐的方式。
library(shiny)
myModuleUI <- function(id) {
tagList(
textOutput(NS(id, "text"))
)
}
myModuleServer <- function(id, val) {
moduleServer(id, function(input, output, session) {
output$text <- renderText({
val
})
})
}
vec <- c(2,13,56,8,10,11,19)
shinyApp(ui = fluidPage(
lapply(vec, FUN = function(x) myModuleUI(paste0("report_", x)))
),
server = function(input, output, session) {
lapply(vec, FUN = function(x) {
myModuleServer(id = paste0("report_", x),
val = x)
})
})