Использование lapply на сервере для создания пользовательского интерфейса рендеринга

#r #shiny #render #lapply

#r #блестящий #визуализация #lapply

Вопрос:

У меня есть некоторые данные, подобные этому subexample

 structure(list(monthyr = structure(c(17287, 17287, 17287, 17287, 
17287, 17287, 17287, 17287, 17287, 17287, 17287, 17287, 17287, 
17287, 17287, 17287, 17287, 17287), class = "Date"), Location = c("TAI", 
"NAM", "LUI", "HEE", "BRA", "KEI", "TAI", "NAM", "LUI", "HEE", 
"BRA", "KEI", "TAI", "NAM", "LUI", "HEE", "BRA", "KEI"), ID = structure(c(-719050, 
-718685, -718320, -717954, -717589, -717224, -719050, -718685, 
-718320, -717954, -717589, -717224, -719050, -718685, -718320, 
-717954, -717589, -717224), class = "Date"), Type = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 
3L), .Label = c("Industrial.compound", "Pesticide", "Pharmaceutical"
), class = "factor"), value = c(0.885230769230769, 1.9203125, 
3.26635, 0.950052631578947, 2.87133333333333, 3.194775, 0.0823076923076923, 
0.190833333333333, 0.467142857142857, 0.58173125, 0.1375, 0.3777475, 
0.0215555555555556, 0.240236363636364, 0.340790909090909, 0.150083333333333, 
0.103333333333333, 0.2665)), row.names = c(29L, 65L, 107L, 149L, 
194L, 237L, 279L, 315L, 357L, 399L, 444L, 487L, 529L, 565L, 607L, 
649L, 694L, 737L), class = "data.frame")
> 
  

Я использовал streamgraph и пакет shiny для создания streamgraph с заголовком

Я использовал это

 library(streamgraph)
library(dplyr)
library(shiny)

ui = shinyUI(fluidPage(
  h3("Title Example", style="text-align:center"),
  streamgraphOutput('sg1')
))

server = function(input, output) {

  sgexample<-streamgraph(subexample, "Type","value", "ID" )%>%
    sg_legend(show=TRUE, label="Parameter: ")%>%
    sg_axis_x(1, "ID")%>% sg_axis_y(0)

  output$sg1 <- renderStreamgraph(sgexample)

}

shinyApp(ui = ui, server = server)
  

Я использовал это только для одного графика.

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

Мне удалось получить графики потоков для списка с

 lapply(subexample1, function (x) x %>% streamgraph("Type","value", "ID" )%>%
         sg_legend(show=TRUE, label="Parameter: ")%>%
         sg_axis_x(1, "ID", "%Y")%>% sg_axis_y(0))
  

Но я не уверен, как изменить раздел пользовательского интерфейса.

Можете ли вы мне помочь?

Ответ №1:

Как элементы пользовательского интерфейса, так и реализации серверной логики могут быть обернуты в lapply() .

 subexample1 <- replicate(3, subexample, simplify = FALSE)

ui = shinyUI(fluidPage(
  h3("Title Example", style = "text-align:center"),
  lapply(seq_along(subexample1), function(i) streamgraphOutput(paste0("sg", i)))
))

make_streamgraph <- function(x)
  x %>%
  streamgraph("Type", "value", "ID") %>%
  sg_legend(show = TRUE, label = "Parameter: ") %>%
  sg_axis_x(1, "ID", "%Y") %>%
  sg_axis_y(0)

server = function(input, output) {
  lapply(seq_along(subexample1), function(i) {
    output[[paste0("sg", i)]] <- renderStreamgraph({
      make_streamgraph(subexample1[[i]])
    })
  })
}

shinyApp(ui = ui, server = server)
  

Комментарии:

1. Пожалуйста, объясните любые изменения для OP и будущих читателей и избегайте ответа только с кодом.