1

私は次のようなものを作成しようとしています:

ここに画像の説明を入力

サンプルコード:

ライブラリ(シャイニー) ライブラリ(シャイニーダッシュボード)

data <- data_frame(
  category = c(rep("Superhero outfits", 5), "Game of Thrones houses", rep("My favourite bars", 2), "I am groot"),
  keywords = c("superman + red + cape", "Batman + black + cape", "Hulk + green + purple", "Spiderman + web", "Groot + wood + plant", "wolf + stark",
               "chocolate + nuts", "protein + cookie", "I + groot"),
  author = c(rep("Preter Parker", 3), rep("Bruce Wayne", 5), "Groot"),
  date = c(rep(Sys.Date()))
)

shinyApp(
  ui = dashboardPage(
    dashboardHeader(title = "MyApp"),
    dashboardSidebar(),
    dashboardBody(
       column(
         selectizeInput("selectCategory", NULL, choices = unique(data$category)),
         uiOutput("displayChoicesUI"),
         width = 4
     ) 
    )
  ),
  server = function(input, output) {

    choices_list <- reactive({
      if(!is.null(input$selectCategory)){
      data %>%
      filter(category == input$selectCategory) %>%
      mutate(ID = row_number())
      }
    })

    output$displayChoicesUI <- renderUI({
      if(!is.null(input$selectCategory)){

        lapply(1:nrow(choices_list), function(i){
          column(
            width = 12,
            column(
              width = 8,
              verbatimTextOutput(paste0("text_", choices_list$ID[i]))
            ),
            column(
              width = 2,
              actionLink(paste0("delete_", choices_list$ID[i]), HTML("<i class='fa fa-times-circle'></i>"))
            ),
            column(
              width = 2,
              actionLink(paste0("edit_", choices_list$ID[i]), HTML("<i class='fa fa-edit'></i>"))
            )
          )
        })
      }
    })

    lapply(1:????, function(i){
                      output[[paste0("text_", i)]] <- renderText({
                        HTML(paste0(choices_list()$keywods[i], br(), choices_list()$author, ", ", choices_list()$date))
                      })
                    })

    lapply(1:????, function(i){
          observeEvent(input[[paste0("delete_", i)]], {
          })
    })

    lapply(1:????, function(i){
      observeEvent(input[[paste0("edit_", i)]], {
      })
    })


  }
)

問題は、カテゴリにいくつのキーワードがあるかわからないため、どのようにループして反応性を作成するかです-キーワードと作成者を出力し、ボタンを機能させます。

反復回数はリアクティブ値ですが、lapply にリアクティブ値を追加することはできません。sth likeをすることは私にlapply(1:nrow(choices_list()), function(i){})与えますEvaluation error: Operation not allowed without an active reactive context. (You tried to do something that can only be done from inside a reactive expression or observer.).

意図したことを行う方法はありますか、それともより良い方法がありますか? 私はアイデアがありません。

4

1 に答える 1