在RShiny中使用ObserveeEvent周围的数值输入参数的lapply函数
我想创建多个相互连接的selectize输入。换句话说:如果在一个selectizeinputs中选择了一个项目,我希望它从其他selectizeinputs的选择中消失。此外,我希望selectize输入的数量与NumericiInput中选择的数量相对应 下面的例子是有效的。我只剩下以下问题:在RShiny中使用ObserveeEvent周围的数值输入参数的lapply函数,r,lapply,shiny,R,Lapply,Shiny,我想创建多个相互连接的selectize输入。换句话说:如果在一个selectizeinputs中选择了一个项目,我希望它从其他selectizeinputs的选择中消失。此外,我希望selectize输入的数量与NumericiInput中选择的数量相对应 下面的例子是有效的。我只剩下以下问题: X = 1:100, ####### QUESTION HERE 不是1:100,我想输入类似于1:input$ui\U number的内容,但在R中有以下错误: Error in .getR
X = 1:100, ####### QUESTION HERE
不是1:100,我想输入类似于1:input$ui\U number的内容,但在R中有以下错误:
Error in .getReactiveEnvironment()$currentContext() : Operation not allowed without an active reactive context.
如果我在lappy周围放置一个“反应”或“观察”函数,则observeEvent不再工作。有什么把戏给我吗
谢谢你的帮助
modalities <- LETTERS[1:10]
library(shiny)
app <- shinyApp(
ui = tabPanel("Change modalities",
numericInput("ui_number", label="Number of modalities",min = 1, max = 4, value=3),
uiOutput("renderui")
),
server = function(input, output, session) {
output$renderui <- renderUI({
output = tagList()
for(i in 1:input$ui_number){
output[[i]] = tagList()
output[[i]][[1]] = selectizeInput(paste0("ui_mod_choose",i), label=paste0("Modality ",i),choices=modalities, multiple = TRUE)
}
return(output)
})
lapply(
X = 1:100, ####### QUESTION HERE
FUN = function(j){
observeEvent({
input[[paste0("ui_mod_choose",j)]]
},
{
sapply(1:input$ui_number,function(i){
vecteur <- do.call(c,lapply((1:input$ui_number)[-i],function(i){input[[paste0("ui_mod_choose",i)]]}))
updateSelectizeInput(session,paste0("ui_mod_choose",i),choices= modalities[!modalities %in% vecteur],selected = input[[paste0("ui_mod_choose",i)]])
})
},
ignoreNULL = FALSE)
}
)
observeEvent({
input$ui_num
},
{
sapply(1:nput$ui_num,function(i){
updateSelectizeInput(session,paste0("ui_mod_choose",i),choice= modalities,selected=NULL)
})
}
)
}
)
runApp(app)
模式您可以有一个observeEvent()
而不是多个observeEvent()
:
库(闪亮)
您最后的observeEvent
位未使用。尽管输入错误:1:nput
,但代码仍能正常工作,所以您可以分辨出来。非常感谢您!!!它起作用了!不幸的是,我最初的问题甚至比这更复杂,我被另一个步骤所阻碍(这可能与我不完全理解在Shiny中何时使用隔离和观察事件有关)。我这期的以下内容刊登在另一期中:
library(shiny)
modalities <- LETTERS[1:10]
ui = tabPanel("Change modalities",
numericInput("ui_number", label = "Number of modalities",
min = 1, max = 4, value = 3),
uiOutput("renderui"))
server = function(input, output, session) {
# Generate modalities select lists
output$renderui <- renderUI({
output = tagList()
for (i in seq_len(input$ui_number)) {
output[[i]] = selectizeInput(paste0("ui_mod_choose", i),
label = paste0("Modality ", i),
choices = modalities, multiple = TRUE)
}
return(output)
})
# Remove selected modalities from other select lists
observe({
n <- isolate(input$ui_number)
for (i in seq_len(n)) {
vecteur <- unlist(lapply((1:n)[-i], function(i)
input[[paste0("ui_mod_choose",i)]]))
updateSelectizeInput(session, paste0("ui_mod_choose",i),
choices = setdiff(modalities, vecteur),
selected = input[[paste0("ui_mod_choose",i)]])
}
})
}
runApp(shinyApp(ui, server))