【问题标题】:r shiny - cannot coerce type 'closure' to vector of type 'double'r shiny - 不能将类型“闭包”强制为“双”类型的向量
【发布时间】:2021-06-14 00:44:59
【问题描述】:

我在运行闪亮的应用程序时遇到了这个烦人的错误。一、代码:

df2 <- c(2012,2013,2014,2015)

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
     sliderInput("year_range",
                  "Select Years:",
                  min = 2012,
                  max = 2019,
                  value = c(2012,2019),
                  ticks = FALSE
     )
    )
    mainPanel( 
      # stuff goes in here
    )
   )
 )

 server <- function(input, output) {
   # put years into variables
   show_years_l <- renderText(input$year_range[1])
   show_years_h <- renderText(input$year_range[2])

   # update list based on years selected
   trim_years <- df2 %>% filter(between(V1, show_years_l, show_years_h))
 }
 
 shinyApp(ui = ui, server = server)

我已经阅读了这些链接,但无法在逻辑上将其应用于我的情况:

R shiny cannot coerce type 'closure' to vector of type 'double'

R error: cannot coerce type 'closure' to vector of type 'double'

我尝试将 as.numeric 用于 show_years_l 和 show_years_h 值,但我得到了同样的错误。

 filter(between(V1, as.numeric(show_years_l), as.numeric(show_years_h)))

我也尝试在过滤器语句中将值键入为数字,即 2013、2014,但显示相同的错误。

 filter(between(V1, 2013, 2014))

提前致谢。

【问题讨论】:

  • 你为什么在这里使用renderText?您似乎没有渲染任何文本。 trim_years &lt;- df2 %&gt;% filter(between(V1, input$year_range[1], input$year_range[2])) 怎么样。但是,trim_years 仍然需要在反应式环境中,而目前不是。你有没有学习过闪亮的教程或任何东西?一个很好的起点是这里的视频:rstudio.com/resources/shiny-dev-con-2016。特别是对反应性的介绍。
  • 运行ui 代码返回argument "mainPanel" is missing, with no default
  • 感谢@MrFlick,不幸的是,这会返回相同的错误。我确实浏览了教程,只是一次添加点点滴滴。我无法轻松找到有关我想要实现的目标的信息。
  • @RonakShah 我故意将 mainPanel 排除在外,因为我认为它无关紧要,这是我的错误,我将修复示例代码。
  • @binga30 它返回完全相同的错误?确保删除 show_years_l show_years_h 值,因为我们直接在过滤器中使用输入。但是你到底想做什么trim_years?您的代码中没有任何内容。我无法想象哪个教程告诉您在 UI 中没有匹配的 textOutput() 时使用 renderText()。您不会使用来自 render() 函数的内容作为计算的输入。也许你在想reactiveVal() 这似乎很不完整,不清楚你到底想做什么。

标签: r shiny


【解决方案1】:

试试这个:

library(tidyverse)
library(shiny)

df2 <- tibble(years = c(2012,2013,2014,2015))

ui <- fluidPage(
    sidebarLayout(
        sidebarPanel(
        sliderInput("year_range",
                    "Select Years:",
                    min = 2012,
                    max = 2019,
                    value = c(2012, 2019),
                    ticks = FALSE)),
        mainPanel(tableOutput('table'))
    )
)

server <- function(input, output) {
    
     
    output$table <-  renderTable({
    filter(df2, years >= input$year_range[1], years <= input$year_range[2])
    })
}

shinyApp(ui = ui, server = server)

【讨论】:

  • 谢谢,我运行了这个例子,它运行良好。我能够获取过滤器语句并在我的渲染图中使用它。这是我的错,我之前的过滤器语句在 renderPlot 函数之外,但我仍然不确定为什么在使用“between()”时出现:无法将类型“闭包”强制转换为“双”类型的向量错误
猜你喜欢
  • 1970-01-01
  • 2019-05-23
  • 2015-08-19
  • 1970-01-01
  • 2015-07-01
  • 2013-12-24
  • 1970-01-01
  • 2015-04-26
  • 2019-12-11
相关资源
最近更新 更多