Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.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 条件面板不';t按预期显示,但出现警告消息_R_Shiny - Fatal编程技术网

R 条件面板不';t按预期显示,但出现警告消息

R 条件面板不';t按预期显示,但出现警告消息,r,shiny,R,Shiny,我有一个带有条件面板的应用程序,它取决于一系列用户选择。这太复杂了,无法提供一个可复制的示例,但我将尝试给出一个简化的版本,以获得我所要求的内容,并包括实际应用程序中的相关部分 在我的应用程序中,如果用户加载Excel文件,然后从单选按钮中选择另一个条件,则会出现某个条件面板。如果加载了Excel文件并进行了适当的选择,则给定的条件面板将按预期显示。如果加载了csv文件,则不会显示“条件”面板,但会在其应位于的位置周围显示一条红色消息object sheetrID not found。这个错误(

我有一个带有条件面板的应用程序,它取决于一系列用户选择。这太复杂了,无法提供一个可复制的示例,但我将尝试给出一个简化的版本,以获得我所要求的内容,并包括实际应用程序中的相关部分

在我的应用程序中,如果用户加载Excel文件,然后从单选按钮中选择另一个条件,则会出现某个条件面板。如果加载了Excel文件并进行了适当的选择,则给定的条件面板将按预期显示。如果加载了csv文件,则不会显示“条件”面板,但会在其应位于的位置周围显示一条红色消息
object sheetrID not found
。这个错误(实际上是一个警告)纯粹是表面现象,但我想了解为什么会发生这种情况

在这个简单的应用程序中,在条件面板上获取类似错误消息的方法是什么

library(shiny)

ui <- fluidPage(

  column(3,
         h3("Add new data"),
         uiOutput("dummyslider")
  ), # close column

  column(9,
         h3("Matching"),
         uiOutput("condition_select")
  ) # close column

) # close fluidPage


server <- function(input, output, session) {

  output$dummyslider <- renderUI({ 
    sliderInput(inputId = "num",
                label = "Choose a number",
                value = 25, min = 1, max = 100)
  })

  output$condition_select <- shiny::renderUI({
  shiny::conditionalPanel(
    condition="input.num > 40",
    shiny::sliderInput(
      inputId="slider2",
      label="test label",
      min=0,
      max=1,
      value=0.1,
      step=0.01
    )
  )
})

} # close server

shinyApp(ui = ui, server = server)
方法_cat是单选按钮的输出:

output$select_method_cat <- shiny::renderUI({
    shinyWidgets::awesomeRadio(
      inputId="method_cat",
      label="Select the method to treat categorical variables:",
      choices=getMethodCatOptions(),
      selected="thresh"
    )
  }) # close renderUI

output$select\u method\u cat为了演示我上面的评论,这里是示例应用程序的一个改编版本,它会生成相同的错误消息。但是,正如我提到的,该错误与您的应用程序无关,而是由于使用了
openxlsx::loadWorkbook()

在本例中,当您将滑块移动超过40并成功上载文件后,条件面板将打开。如果使用
openxlsx::loadWorkbook()
尝试访问.csv,则会出现您描述的错误(未成功上载),面板将无法打开。您可以切换到
read.csv()
以避免错误并打开面板

在您的情况下,如果您不希望在用户尝试上载.csv文件时打开面板,那么最好包含一个函数,告诉用户上载Excel文件而不是.csv文件

更新的用户界面:

library(shiny)

ui <- fluidPage(  
  column(3,
     h3("Add new data"),
     uiOutput("dummyslider")
  ), # close column
  column(3,
     h3("Matching"),
     uiOutput("condition_select")
  ), # close column
  column(3,
     h3("Table/error"),
     tableOutput("tbl")
  )
) # close fluidPage
server <- function(input, output, session) {
  output$dummyslider <- renderUI({
    tagList(
      sliderInput(inputId = "num",
            label = "Choose a number",
            value = 25, min = 1, max = 100),
      fileInput("upl", label = "Upload any .csv file:")
    )
  })
  output$condition_select <- shiny::renderUI({
    shiny::conditionalPanel(
      condition="input.num > 40 & output.uploaded",
      shiny::sliderInput(
        inputId="slider2",
        label="test label",
        min=0,
        max=1,
        value=0.1,
        step=0.01
      )
    )
  })
  data <- reactive({
    uplFile <- input$upl
    if (is.null(uplFile))
      return(NULL)
    #tbl <- read.csv(uplFile$datapath)
    tbl <- openxlsx::loadWorkbook(file=as.character(uplFile$datapath))
    return(tbl)
  })
  output$uploaded <- reactive({ return( !is.null(data()) ) })
  outputOptions(output, "uploaded", suspendWhenHidden=FALSE)
  output$tbl <- renderTable ({
    if (is.null(data())) return()
    head(data.frame(read.xlsx(data())),10)
  })
}

shinyApp(ui, server)
库(闪亮)

ui
sheetrID
已分配给excel工作簿。在中间添加
req()
语句,看看这是否是由于使用命令读取文件而导致的错误?也许添加一个取决于您的文件类型的条件会有所帮助。@ADuv,我已经有一个条件,即getExtension==xlsx,以便面板显示……您是否正在使用
openxlsx::loadWorkbook()
加载Excel文件
sheetrID
是一个临时对象,用于
loadWorkbook
函数中的各种用途。如果创建csv文件并尝试在本地R环境中使用
loadWorkbook
访问该文件,则会出现相同的错误。我猜你的应用程序中的错误只是与该功能的使用有关,而与你的应用程序或构造无关。所以@ADuv走上了正确的道路,我认为……这只是一个一般性的陈述,可能(也可能不)适用于您的情况,但我以前遇到过这样一个涉及环境的问题。在这些情况下,我发现Shining将变量放置在相关函数的环境中(例如observeEvent)。如果您试图在shiny中的其他地方引用该变量,则需要使用
@matsuo_basho将该变量分配给全局环境-如果您尝试加载.xlsx文件,我没有意识到这会产生错误。现在已经修复了,希望能澄清错误的来源。
library(shiny)

ui <- fluidPage(  
  column(3,
     h3("Add new data"),
     uiOutput("dummyslider")
  ), # close column
  column(3,
     h3("Matching"),
     uiOutput("condition_select")
  ), # close column
  column(3,
     h3("Table/error"),
     tableOutput("tbl")
  )
) # close fluidPage
server <- function(input, output, session) {
  output$dummyslider <- renderUI({
    tagList(
      sliderInput(inputId = "num",
            label = "Choose a number",
            value = 25, min = 1, max = 100),
      fileInput("upl", label = "Upload any .csv file:")
    )
  })
  output$condition_select <- shiny::renderUI({
    shiny::conditionalPanel(
      condition="input.num > 40 & output.uploaded",
      shiny::sliderInput(
        inputId="slider2",
        label="test label",
        min=0,
        max=1,
        value=0.1,
        step=0.01
      )
    )
  })
  data <- reactive({
    uplFile <- input$upl
    if (is.null(uplFile))
      return(NULL)
    #tbl <- read.csv(uplFile$datapath)
    tbl <- openxlsx::loadWorkbook(file=as.character(uplFile$datapath))
    return(tbl)
  })
  output$uploaded <- reactive({ return( !is.null(data()) ) })
  outputOptions(output, "uploaded", suspendWhenHidden=FALSE)
  output$tbl <- renderTable ({
    if (is.null(data())) return()
    head(data.frame(read.xlsx(data())),10)
  })
}

shinyApp(ui, server)