R 两个有光泽的铝板
我有一个闪亮的应用程序,我创建了以下conditionalPanel: 如果output.levels为TRUE,我希望选择0到25个中心点。否则,中心点的数量必须为0 问题是,如果该条件为真,我选择了0多个中心点,然后该条件变为假,Shiny将保留之前选择的中心点,而不是0 有办法解决吗?R 两个有光泽的铝板,r,shiny,conditional,R,Shiny,Conditional,我有一个闪亮的应用程序,我创建了以下conditionalPanel: 如果output.levels为TRUE,我希望选择0到25个中心点。否则,中心点的数量必须为0 问题是,如果该条件为真,我选择了0多个中心点,然后该条件变为假,Shiny将保留之前选择的中心点,而不是0 有办法解决吗? 谢谢。您面临的问题来自于ui中有两个几乎相同的元素,它们共享相同的id。条件面板仅隐藏您的元素,但它们仍然存在于文档中。因此,您的第一个数字输入将始终是由Shiny注册的数字输入,而第二个数字输入将不会绑定
谢谢。您面临的问题来自于ui中有两个几乎相同的元素,它们共享相同的id。条件面板仅隐藏您的元素,但它们仍然存在于文档中。因此,您的第一个数字输入将始终是由Shiny注册的数字输入,而第二个数字输入将不会绑定,即,由于重复id,不会将其输入发送到Shiny 我建议你以另一种方式实施这种情况。Shiny中有一些函数,可以在应用程序全部设置完毕后更改一些现有的ui元素。这些函数是updatexxInput,您可以更改相应输入元素中的任何变量。由于您的唯一目标是更改NumericiInput的最大值,因此我们可以在服务器上轻松地执行此操作,在服务器上我们可以观察级别或任何其他变量。在下面的代码中,我使用了一个简单的复选框。用于更改最大值的命令是updateEnumericInputSession,centerpoints,max=0。请注意,这只会更改输入的一个属性。与重新呈现UI元素相比,这是一个巨大的优势,因为您不必跟踪所有其他属性 UpdatexxInput函数非常有用,请尝试一下
library(shiny)
ui <- shinyUI(
fluidPage(
numericInput("centerpoints", "Number of center points", value=0, min=0, max=25),
checkboxInput("changeCenterpoints", "Cap maximum at 0")
)
)
server <- function(input, output, session){
observeEvent(input$changeCenterpoints, {
if(input$changeCenterpoints){
updateNumericInput(session, "centerpoints", max = 0, value = 0)
}else{
updateNumericInput(session, "centerpoints", max = 25)
}
})
}
shinyApp(ui, server)
您面临的问题来自ui中有两个几乎相同的元素,它们共享相同的id。条件面板仅隐藏您的元素,但它们仍然存在于文档中。因此,您的第一个数字输入将始终是由Shiny注册的数字输入,而第二个数字输入将不会绑定,即,由于重复id,不会将其输入发送到Shiny 我建议你以另一种方式实施这种情况。Shiny中有一些函数,可以在应用程序全部设置完毕后更改一些现有的ui元素。这些函数是updatexxInput,您可以更改相应输入元素中的任何变量。由于您的唯一目标是更改NumericiInput的最大值,因此我们可以在服务器上轻松地执行此操作,在服务器上我们可以观察级别或任何其他变量。在下面的代码中,我使用了一个简单的复选框。用于更改最大值的命令是updateEnumericInputSession,centerpoints,max=0。请注意,这只会更改输入的一个属性。与重新呈现UI元素相比,这是一个巨大的优势,因为您不必跟踪所有其他属性 UpdatexxInput函数非常有用,请尝试一下
library(shiny)
ui <- shinyUI(
fluidPage(
numericInput("centerpoints", "Number of center points", value=0, min=0, max=25),
checkboxInput("changeCenterpoints", "Cap maximum at 0")
)
)
server <- function(input, output, session){
observeEvent(input$changeCenterpoints, {
if(input$changeCenterpoints){
updateNumericInput(session, "centerpoints", max = 0, value = 0)
}else{
updateNumericInput(session, "centerpoints", max = 25)
}
})
}
shinyApp(ui, server)
非常感谢。我将尝试使用UpdatexxInput函数。谢谢!我将尝试使用updatexxInput函数。