r - if语句去掉: Error in if: argument is of length zero

标签 r shiny

想法

根据 selectizeInput() 输入,我想显示数据框中的一行数据。但是,某些变量只有在它们的值不是 FALSE 时才会显示。 selectizeInput() 包含一个占位符提示,这是非常可取的。

问题

我开发的代码实际上可以工作,但在选择任何选项之前会显示

Error in if: argument is of length zero

在应用程序内部,这是非常不受欢迎的。

示例代码

library("shiny")

# simulate data
data <- data.frame(
  name = c("Adam", "Debbie", "Lancelot", "Dracula"),
  age = c(21, 48, 72, 1023),
  coward = c("yes, a coward", "just a little bit", FALSE, "too old to be a coward")
)

ui <- fluidPage(
  # selectize
  selectizeInput(
    inputId = "input",
    label = NULL,
    choices = c("..." = "", as.character(data[, "name"])),
    selected = NULL,
    multiple = FALSE
  ),
  # show output
  uiOutput(outputId = "output")
)

server <- function(input, output, session){
  output$output <- renderUI({
    div(
      # show name
      data[which(input$input == data[, "name"]), "name"], br(),
      data[which(input$input == data[, "name"]), "age"], br(),
      # if "coward" is not FALSE than show its value
      if(data[which(input$input == data[, "name"]), "coward"] != FALSE){
        data[which(input$input == data[, "name"]), "coward"]
      }
    )
  })
}

shinyApp(ui, server)

尝试的解决方案

尝试将 if() 语句包装在 suppressWarnings()suppressMessages() 中。不会改变任何东西。还尝试将 !is.null(input$input) && 放入 if() 条件中,但它只是将初始错误更改为

Error: missing value where TRUE/FALSE needed

问题

selectizeInput()中选择一个选项之前,如何编写条件使得shiny不会返回错误?

还有其他更通用的 hack 来强制 shiny 不在应用内显示错误消息吗?

我觉得我在这里遗漏了一些明显的东西......

最佳答案

每当您在 R 中遇到不确定的错误时,首先要做的是尝试隔离它并使用 browser() 来查看在错误发生之前发生了什么。执行此操作后,我发现该错误与 Shiny 或 UI 无关,只是因为您试图将 factor(0)FALSE 进行比较。

input$input 的值最初是 ""。这意味着 data[which(input$input == data[, "name"]), "coward"] 的值最初是 factor(0)。这意味着您的 if 语句正在执行 factor(0) == FALSE 比较,这会中断。

要弄清楚我需要做的就是将服务器代码简化为

server <- function(input, output, session){
  observe({
    mydata <- data[which(input$input == data[, "name"]), "coward"]
    browser()
    if (mydata == FALSE) {
      cat("hello")
    }
  })
}

使用调试器我看到了正在使用的值

关于r - if语句去掉: Error in if: argument is of length zero,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39519491/

相关文章:

r - 即使修改数据后,如何使用plotly为选定的点返回相同的event_data信息

javascript - 仅在悬停时显示文本

r - 计算频率和从长到宽转换的更快方法

r - 在 R 中绘制棋盘

r - dyld : Library not loaded:/usr/local/opt/openblas/lib/libopenblasp-r0. 2.20.dylib

r - ggplot2 两侧带有正标签的双向条形图

css - R shinyDashboard 自定义框状态颜色

css - 如何在 R shiny selectizeInput 组标题中设置字体颜色?

java - JRI - 如何定位 R 中的错​​误

css - picketInput 更改占位符 R Shiny Widgets