为什么shinyApps中的seq()函数不工作?

问题描述 投票:0回答:1

我试着创建了一个shinyApps的 seq() 函数。

header <- dashboardHeader(title = 'Testing' ,titleWidth = 300)
sidebar <- dashboardSidebar(uiOutput("sidebarpanel"), width = 300)
body <- dashboardBody(uiOutput("body"))
uix <- dashboardPage(header, sidebar, body)

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

  output$sidebarpanel <- renderUI({
    div(
      sidebarMenu(id="tabs",
                  menuItem("Tes 1", tabName = "tes1", icon = icon("dashboard"), selected = TRUE)
                  )
    )
  })

  output$body <- renderUI({
    tabItems(tabItem(tabName = "tes1",
                      fluidRow(column(2, textInput("s1", "From :", value = 1))
                                ,column(2, textInput("s2", "To", value = 7))
                      ),
                      textOutput("result")
             )
    )
    })

  segment_low <- reactiveValues(ba=NULL)
  segment_high <- reactiveValues(ba=NULL)
  results <- reactiveValues(ba=NULL)

  toListen <- reactive({
    list(input$s1, input$s2)
  })

   observeEvent(toListen(),{
    segment_low$ba <- input$s1 %>% as.numeric()
    segment_high$ba <- input$s2 %>% as.numeric()
  })

  observe({
    results$ba <- seq(segment_low$ba,segment_high$ba, 1)
  })

  output$result <- renderText({
    results$ba 
  })

  }

shinyApp(uix, serverx)

在该语法中,我将创建一个名为 results$ba 因为我想在下次升级该值。但它变成了一个错误。

Warning: Error in seq.default: 'from' must be of length 1
  [No stack trace available]

谁能帮我解决这个问题?因为这个错误刚刚发生,如果我把reactiveValues放到了 seq() 函数,而我输入一个静态输入,例如 seq(2,5,1) 它不会返回一个错误。而且我已经把初始的 value 对于每个输入 textInput() 功能也。

Kindle需要你的帮助,开发人员!非常感谢。

r shiny syntax-error sequence seq
1个回答
1
投票

问题是,你正在呈现的是 s1s2 输入在服务器端。正因为如此,服务器在一开始就将它们渲染为 NULL和你的 seq 函数在得到 NULL 值。

最简单的做法就是在上面加一个 req 函数来防止你的代码评估,除非它得到一些非NULL值。

    observe({
        req(segment_low$ba, segment_high$ba)
        results$ba <- seq(segment_low$ba,segment_high$ba, 1)
    })

基本上,由于你使用的是observision,而observision是非常急切的,所以你要告诉这个 seq 函数来立即评估。通过使用 req 函数,除非 segment_low$ba 和 segment_high$ba 的值为非 NULL,否则你将停止评估链的发生。

© www.soinside.com 2019 - 2024. All rights reserved.