我试着创建了一个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需要你的帮助,开发人员!非常感谢。
问题是,你正在呈现的是 s1
和 s2
输入在服务器端。正因为如此,服务器在一开始就将它们渲染为 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,否则你将停止评估链的发生。