Производить один и тот же вывод несколько раз - PullRequest
1 голос
/ 08 января 2020

Это, очевидно, минимальный пример, но с более тяжелым кодом он может оказаться своевременным и загромождать мой код, когда мне нужно эффективно выписать три одинаковых вывода, но каждый из которых отфильтрован для представления трех имен вкладок.

Есть ли более эффективный способ получения таких результатов, когда мне не нужно выписывать три отдельных renderTable утверждения?

df <- structure(list(id = c("Tony","Tony","Tony","Tony","Tony","Alex","Alex","Alex","Alex","Alex","Jen","Jen","Jen","Jen","Jen"), 
                     sales = c(13L, 17L, 20L, 30L, 38L, 24L, 10L, 1L, 14L, 43L, 21L, 6L, 14L, 17L, 12L), 
                     leads = c(63L, 91L, 51L, 81L, 88L, 97L, 77L, 61L, 74L, 87L, 74L, 68L, 56L, 53L, 63L)), 
                row.names = c(NA, -15L), class = "data.frame")

ui <- fluidPage(navlistPanel("Test",
                  tabPanel("Tony",
                           tableOutput("t1")),
                  tabPanel("Alex",
                           tableOutput("t2")),
                  tabPanel("Jen",
                           tableOutput("t3"))))

server <- function(input,output,session){
output$t1 <- renderTable({df%>%filter(id=='Tony')})
output$t2 <- renderTable({df%>%filter(id=='Alex')})
output$t3 <- renderTable({df%>%filter(id=='Jen')})
}

shinyApp(ui,server)

1 Ответ

1 голос
/ 08 января 2020

Вы можете использовать sapply:

df <- structure(list(id = c("Tony","Tony","Tony","Tony","Tony","Alex","Alex","Alex","Alex","Alex","Jen","Jen","Jen","Jen","Jen"),
                     sales = c(13L, 17L, 20L, 30L, 38L, 24L, 10L, 1L, 14L, 43L, 21L, 6L, 14L, 17L, 12L),
                     leads = c(63L, 91L, 51L, 81L, 88L, 97L, 77L, 61L, 74L, 87L, 74L, 68L, 56L, 53L, 63L)),
                row.names = c(NA, -15L), class = "data.frame")

ui <- fluidPage(navlistPanel("Test",
                             tabPanel("Tony",
                                      tableOutput("t1")),
                             tabPanel("Alex",
                                      tableOutput("t2")),
                             tabPanel("Jen",
                                      tableOutput("t3"))))
library(dplyr)
server <- function(input,output,session){
  names <- c("Tony", "Alex", "Jen")
  sapply(1:length(names), function(k) {
    output[[paste0("t", k)]] <- renderTable({df%>%filter(id==names[k])})
  })
}

shinyApp(ui,server)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...