Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 两个有光泽的铝板_R_Shiny_Conditional - Fatal编程技术网

R 两个有光泽的铝板

R 两个有光泽的铝板,r,shiny,conditional,R,Shiny,Conditional,我有一个闪亮的应用程序,我创建了以下conditionalPanel: 如果output.levels为TRUE,我希望选择0到25个中心点。否则,中心点的数量必须为0 问题是,如果该条件为真,我选择了0多个中心点,然后该条件变为假,Shiny将保留之前选择的中心点,而不是0 有办法解决吗? 谢谢。您面临的问题来自于ui中有两个几乎相同的元素,它们共享相同的id。条件面板仅隐藏您的元素,但它们仍然存在于文档中。因此,您的第一个数字输入将始终是由Shiny注册的数字输入,而第二个数字输入将不会绑定

我有一个闪亮的应用程序,我创建了以下conditionalPanel:

如果output.levels为TRUE,我希望选择0到25个中心点。否则,中心点的数量必须为0

问题是,如果该条件为真,我选择了0多个中心点,然后该条件变为假,Shiny将保留之前选择的中心点,而不是0

有办法解决吗?
谢谢。

您面临的问题来自于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函数。