【问题标题】:R Shiny Reactive values, dplyr filter error?R Shiny Reactive 值,dplyr 过滤器错误?
【发布时间】:2019-05-04 09:54:32
【问题描述】:

当我在 UI 中选择输入以立即在页面上反映结果时,我试图弄清楚。 我的搜索结果让我研究了反应式表达式和反应式值。但是当我试图过滤数据的值时,我认为这会导致一些复杂性,但我不知道我应该如何处理。

过滤器功能似乎不起作用。

这是错误信息:

Warning: Error in UseMethod: no applicable method for 'filter_' applied to an object of class "c('reactiveExpr', 'reactive')"
Stack trace (innermost first):
    51: filter_
    50: filter.default
    49: filter
    48: function_list[[i]]
    47: freduce
    46: _fseq
    45: eval
    44: eval
    43: withVisible
    42: %>%
    41: eval
    40: makeFunction
    39: exprToFunction
    38: observe
    37: server 
     1: runApp
Error in UseMethod("filter_") : 
  no applicable method for 'filter_' applied to an object of class "c('reactiveExpr', 'reactive')"

【问题讨论】:

    标签: shiny shinydashboard shiny-server shiny-reactivity


    【解决方案1】:

    我发现了两个问题,

    第一个反应性语句是函数 - 您需要在它们之后添加括号 ()。 其次,您需要处理变量的命名,尤其是在 R 中命名变量 data 从来都不是一件好事,并且您首先将两个对象命名为相同的数据集本身,然后是返回数据集的反应性语句 - 它好像这个糊涂闪亮了不少。我将响应式语句重命名为 dta 并为我解决了它。这是完整的服务器代码

    server <- function(input, output, session) {
    
      dta <- reactive({
        data
      })
    
      output$p1 <- renderText({
        paste0("You currently live in ", input$Location, " and are contemplating a job offer in ", input$reLocation, ".")
      })
    
      values <- reactiveValues()
      observe({ 
        # req(input$Location,input$reLocation)
        # browser()
        values$LocationCost <-  dta() %>% filter(UrbanArea == input$Location) %>% select(CostOfLivingIndex)
        values$reLocationCost <-  dta() %>% filter(UrbanArea == input$reLocation) %>% select(CostOfLivingIndex)
      }) 
      # observeEvent(input$Location, {
      #   values$LocationCost <- data %>%
      #     filter(UrbanArea == input$Location) %>%
      #     select(CostOfLivingIndex)
      # })
      # 
      # observeEvent(input$reLocation, {
      #   values$reLocationCost <- data %>%
      #     filter(UrbanArea == input$reLocation) %>%
      #     select(CostOfLivingIndex)
      # })
    
      output$p2 <- renderText({
        if (values$LocationCost < values$reLocationCost) {
          calc <- round(100* ((values$reLocationCost-values$LocationCost)/values$LocationCost), 2)
          print(paste0("You need ", calc, "% increase in your after-taxes income in order to maintain your present lifestyle."))
        } else {
          calc <- round(100 * ((values$LocationCost-values$reLocationCost)/values$reLocationCost), 2)
          print(paste0("You can sustain upto ", calc, "% reduction in after taxes income without reducing your present lifestyle."))
        }
      })
    
    
    } 
    

    希望这会有所帮助!

    【讨论】:

    • 哦,非常感谢您的意见。在命名变量时,我必须更加注意。谢谢!
    猜你喜欢
    • 2018-10-11
    • 2018-10-07
    • 2015-01-19
    • 2016-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-23
    • 2014-04-19
    相关资源
    最近更新 更多