R反应式if语句中未找到闪亮对象

时间:2019-05-17 10:06:03

标签: r shiny

我有一个R闪亮的应用程序,可以生成各种报告。现在,我想添加选项以排除用于生成带有复选框输入的某些图的数据的某些部分。

这里是可复制的示例:

App.R

library(shiny)
library(ggplot2)
library(dplyr)


ui <- fluidPage(
    checkboxInput("exclude_x", "Exclude x", FALSE),
    plotOutput("plot")

)


server <- function(input, output) {

    source('data.R', local = TRUE)


    output$plot<-renderPlot({
        g<-ggplot(data=data(),aes(x=salary)) + geom_bar()
        g
    })
}

shinyApp(ui = ui, server = server)

data.R

employee <- c('John Doe','Peter Gynn','Jolie Hope')
salary <- c(10200, 23400, 26800)
startdate <- as.Date(c('2010-11-1','2008-3-25','2007-3-14'))


employ_data <- data.frame(employee, salary, startdate, stringsAsFactors=FALSE)


data <- reactive({

    data <-      employ_data %>% 

        mutate(x_1 = 2*salary) %>% 
        { if (input$exclude_x == TRUE)
            filter( x_1 < 35000 )
            else .
        }   

})

取消选中该框(将整个内容作图)时,它工作正常,但是当我勾选该框时,出现以下错误:

警告:过滤器中的错误:找不到对象“ x_1”

在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我已更新您的服务器代码,如下所示:

server <- function(input, output) {

  #source('data.R', local = TRUE)


  output$plot<-renderPlot({
    g<-ggplot(data=data(),aes(x=salary)) + geom_bar()
    g
  })

  data <- reactive({

    data <-      employ_data %>% 
      mutate(x_1 = 2*salary)

    if (input$exclude_x == TRUE)
      filter(data, x_1 < 35000 )

  })
}

我认为您的filter(x1 <35000)行引起了错误,因为您的应用正在寻找一个名为x_1的对象。更改为filter(data,x_1 <35000)。