私は次のようなものを作成しようとしています:
サンプルコード:
ライブラリ(シャイニー) ライブラリ(シャイニーダッシュボード)
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.).
意図したことを行う方法はありますか、それともより良い方法がありますか? 私はアイデアがありません。