- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在学习 Shiny 并使用连接到许多 selectizeInputs 的 numericInput 。
如果数字输入等于 1 或 2,我想分别创建 1 和 2 selectizeInputs 并为每个 selectizeInput 选择名为“modalities”的向量的“i”模态编辑:和该选项 = modalities[i] only(而不是modalities)
如果数字输入等于3或4,我想分别创建3个和4个相互连接的selectizeInput(选择=模式)。换句话说:如果在其中一个 selectizeinputs 中选择了一个项目,我希望它从其他 selectizeinputs 的选择中消失。
另外(这就是我遇到的问题)我想在每次修改 numericInput 时“重置”所有选定的 SelectizeInputs。我尝试使用下面的observeEvent,并尝试使用isolate(input$ui_number),但我没有找到任何解决我的问题的方法,因为我不明白如何做到这一点...!
感谢您的帮助!
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)
})
# if input$ui_number is modified to 3 or 4 : set selected to NULL ##### NOT WORKING
observeEvent({input$ui_number},
{
n <- input$ui_number
if(n%in%c(3,4)){
for (i in seq_len(n)) {
updateSelectizeInput(session, paste0("ui_mod_choose",i),selected=NULL)
}
}
}
)
observe({
n <- input$ui_number
if(n%in%c(1,2)){ #if n=1 or 2 => Select the "i"th modality for each selectizeInput
for (i in seq_len(n)) {
updateSelectizeInput(session, paste0("ui_mod_choose",i),
choices = modalities[i],
selected = modalities[i]
)
}
} else{ # if n=3 or 4 => Remove selected modalities from other select lists
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))
此问题对应于本问题的以下问题:
lapply function using a numericInput parameter around an observeEvent in RShiny
EDIT2:新尝试,感谢 @Aurèle 的提示。剩下的唯一问题是 lapply 中的 1:100 可能需要一些时间来加载(没有找到在条件面板周围添加 react 性内容的解决方案,例如 1:input&ui_number)
library(shiny)
modalities <- LETTERS[1:10]
make_conditional_selectizeInputs <- function() {
do.call(
div,
lapply(1:100, function(i)
conditionalPanel(
condition = sprintf("%d <= input.ui_number", i),
selectizeInput(sprintf("ui_mod_choose%d", i),
label = sprintf("Modality %d", i),
choices = character(0), multiple = TRUE, selected = NULL)
)
)
)
}
ui <- tabPanel(
"Change modalities",
uiOutput("rendernumeric"),
#numericInput("ui_number", label = "Number of modalities", min = 1L, max = max, value = 1L),
make_conditional_selectizeInputs()
)
server <- function(input, output, session) {
max <- 4
output$rendernumeric <- renderUI({
numericInput("ui_number", label = "Number of modalities", min = 1L, max = max, value = 1L)
})
n <- reactive({
n <- input$ui_number
if (is.null(n) || is.na(n) || !n >= 0) 0 else n
})
# Reset all
observeEvent(
eventExpr = n(),
handlerExpr = for (i in seq_len(max))
updateSelectizeInput(
session, sprintf("ui_mod_choose%d", i),
choices = if (n() %in% 1:2 && i <= n()) modalities[i] else modalities,
selected = if (n() %in% 1:2 && i <= n()) modalities[i] else NULL
)
)
all_selected <- reactive({
unlist(lapply(seq_len(max), function(i)
input[[sprintf("ui_mod_choose%d", i)]]))
})
# Update available modalities
observeEvent(
eventExpr = all_selected(),
handlerExpr = if (!n() %in% 1:2) for (i in seq_len(n())) {
x <- input[[sprintf("ui_mod_choose%d", i)]]
other_selected <- setdiff(all_selected(), x)
updateSelectizeInput(session, sprintf("ui_mod_choose%d", i),
choices = setdiff(modalities, other_selected),
selected = x)
}
)
}
runApp(shinyApp(ui, server))
最佳答案
基本上,每当您重新生成 selectizeInput
时,您只需要再一行:selected = if (n %in% 1:2) modalities[i] else NULL
。
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()
n <- input$ui_number
n <- if (is.null(n) || is.na(n) || ! n >= 0) 0 else n
for (i in seq_len(n)) {
output[[i]] = selectizeInput(paste0("ui_mod_choose", i),
label = paste0("Modality ", i),
choices = if (n %in% 1:2) modalities[i] else modalities,
multiple = TRUE,
# Add this
selected = if (n %in% 1:2) modalities[i] else NULL)
}
output
})
# Remove selected modalities from other select lists
observe({
n <- isolate(input$ui_number)
if (!n %in% 1:2) 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))
关于每次我在 R Shiny 中修改 numericInput 时都会重置 selectinput,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47678029/
我在下面有一些数据,用于在 R Shiny 中创建圆环图,其中 date是一个字符。我希望能够选择我想要查看其分数的电子邮件,但是在第二个下拉选择中只能看到该电子邮件具有事件的日期。 例如,如果我在第
我有两个 selectInput,我希望第一个(品牌)中的选择更改第二个(糖果)中的可能选择。因此,例如,如果有人在第一个输入框中选择“雀巢”,那么第二个框中只会显示雀巢糖果。我的数据表有一列“品牌”
每当具有不同输入 ID 的另一个 selectInput 的值发生变化时,我需要更改一个具有自己输入 ID 的 selectInput 的值。 在 javascript 中,这将是 onchage,但
下面的 R shiny 脚本创建了三个 selectInput,每个 selectInput 的值都取决于前一个 selectInput 的输入值。例如。在脚本中的数据中,“value”列的值取决于“
在下面的 R Shiny 脚本中,我试图使功能使得在第一个子菜单项中,每个 selectInput 值都取决于上一列中的项目选择。数据附上,代码也写好了。但是我无法达到预期的结果。请运行代码并检查,我
我在 .rmd 文件中使用 shiny 并从 .csv 文件中填充一个 selectInput 选择列表,从中获取唯一值一个子集。 我的问题是下拉列表包含我不想要的列标题(在我下面的示例中为“区域”)
我想删除/减少 Shiny 中 selectinput 的标签和选择选项之间的空间。我还想减少两个不同的选择输入之间的空间。 我曾尝试将 selectinputs 包装成 div 样式并将边距和填充设
如何禁用 selectInput() 下拉菜单中的项目? 例如; library(shiny) ui <- fluidPage(selectInput("id1","Select",choices=c
Shiny 的函数 selectInput() 提供了一个选项,可以从带有“multiple = TRUE”的下拉列表中选择多个项目 但是我想限制用户从基础下拉列表中最多可以选择多少个项目。 您能否建
Shiny 的 documentation提到了 selectInput() : selected The value (or, if none was supplied, the title) of
最初我创建了这个带有参数“company id”和“date”的 Shiny 界面,但这里我们遇到了一个问题:大多数人不知道他们的 id 与我们合作的公司,只知道他们的名字,即(McDonalds,R
我有一个 selectInput,其中显示了所有可能的选项。我想实现它,如果用户在框中键入内容并按回车键,它也将作为选项添加。 observeEvent(input$mykeypress, { if(
在一个 Shiny 的应用程序中,有没有办法阻止 selectInput() 中下拉菜单的文本?从包装,如下面的屏幕截图?每个选项都是一个长文本字符串。我希望下拉菜单在一行上显示每个长字符串,而不需要
我想以“可写”的方式修改我的 selectInput。例如,“位置”包含阿姆斯特丹、鹿特丹、海牙等。我想实现一个“可写”的输入选择器。因此,当有人写“Ams..”或“Amster...”时,会显示符合
目标 我想在我的 shinydashboard::box 的页脚中并排放置一个 selectInput 和一个 actionButton。该按钮应该“相对靠近”selectInput不考虑框的宽度。
我正在尝试在我的两个动态链接的 selectInput 小部件中添加一个 ALL 选项,它会过滤到我的主面板中的一个图表。基本上,我希望用户选择一项服务,例如在线或邮购,或所有服务,与 Prof.Lo
如何观察取消选择selectInput的所有元素在 shiny ? 例如 library(shiny) ui=shinyUI(fluidPage( selectInput("select","",
我正在开发一个小型的 Shiny 应用程序,它将提供对一些公开可用的劳动力市场数据的访问。我有一个长格式的相对简单的数据集,类似于下面的摘录: 数据 Geography Measure Time
我正在构建一个 Shiny 的应用程序,用户可以通过从 selectInput() 中选择船只类型来查看各种类型的船只。根据选择,血管被过滤并显示在传单 map 上。但是,selectInput 中的
我遇到嵌套 selectInput 的问题s 在 shiny 内模块。 考虑以下最小示例应用程序 library(shiny) options <- list(A = 1:3, B = 4:6) mo
我是一名优秀的程序员,十分优秀!