с двумя векторами? Блестящий пример - PullRequest
0 голосов
/ 21 января 2020

Извините, если это немного излишне для постов, имеющих отношение к нескольким аргументам, но я все еще изо всех сил пытаюсь применить эти концепции в моих вложенных функциях. Я также извиняюсь, если заголовок не совсем подходит к сути моего вопроса и открыт для предложений!

Я хотел бы создать серию списков в Shiny из серии фреймов данных, где каждый В списке указывается заголовок, соответствующий имени фрейма данных:

Требуемый вывод

тест

  • A
  • B
  • C

test2

  • D
  • E
  • F

test3

  • G
  • H
  • I

Сначала я создал all_tests, список, содержащий все кадры данных, с именами, соответствующими кадры данных.

Я хочу использовать это в ряде функций:

  • rowBlock создает элемент li (A, B, C, D, E, F) et c
  • rowPallete создает элемент ul всех rowBlocks для каждого фрейма данных вместе с заголовком фрейма данных
  • rowArea объединяет все rowPalletes с учетом заданного пользователем списка фреймов данных (all_tests). Это функция, которую я хотел бы использовать в App.R
library(shiny)

# This is a repex where really I'm going to be importing x # of data frames
# I want to use their column names within each list
# And title each list the name of the dataframe
test <- data.frame("A" = NA, "B" = NA, "C" = NA)
test2 <- data.frame("D" = NA, "E" = NA, "F" = NA)
test3 <- data.frame("G" = NA, "H" = NA, "I" = NA)

all_tests <- list(colnames(test), colnames(test2), colnames(test3))
names(all_tests) <- c("test", "test2", "test3")

# each column name should be a li
rowBlock <- function(name) {
  tags$li(
    class = "block", id = name,
    div(name)
  )
}

# each dataframe should be its own list
# and titled with the name of the df
rowPallete <- function(data) {
  div(
    lapply(names(data), h5),
    tags$ul(
      class="all_blocks",
      lapply(data, rowBlock)
    ))
}

# combine the different dataframes into a series of lists
# to be used within app.R
rowArea <- function(bins) {
  column(1, offset = 0, style='padding:0px;',
         lapply(bins, rowPallete)
  )
}

Я могу заставить код работать, когда я не включаю заголовки ul, но я изо всех сил пытаюсь применить два векторы к той же функции Лэппли. Я играл с использованием column names, names(all_tests), но, похоже, все еще чего-то не хватает. Любая помощь приветствуется!

1 Ответ

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

Похоже, это то, что вы ищете (rowBlock без изменений)

# each dataframe should be its own list
# and titled with the name of the df
rowPallete <- function(data) {
  Map(function(x, y) 
        div(h5(x), tags$ul(class = 'all_blocks', lapply(colnames(y), rowBlock))),
      names(data),
      data)
}

rowArea <- function(bins) {
  column(1, offset = 0, style='padding:0px;',
         rowPallete(bins)
  )
}

ui <- rowArea(all_tests)
server <- function(input, output) {
}

shinyApp(ui = ui, server = server)
...