简体   繁体   中英

invalid 'envir' argument of type 'closure' in R shiny

I am getting "invalid 'envir' argument of type 'closure'" in the place of the plots in R shiny dashboard. Not able to figure out the error. I am trying to subset the data depending on the selection of the zipcode. It would be great if anyone could help here

 library(shiny)
library(shinydashboard)
library(dplyr)

varsfilter = unique(final_kings_house_data$zipcode)
vars = unique(final_kings_house_data$zipcode)

if (interactive()) {
header <- dashboardHeader(title = "Kings County Housing Data")

sidebar <- dashboardSidebar(

  sidebarSearchForm(label = "Enter a number", "searchText", "searchButton"),
  sidebarMenu(

    id = "tabs",
    menuItem("Dashboard", tabName = "dashboard", icon = icon("dashboard")),
    menuItem("Widgets", icon = icon("th"), tabName = "widgets", badgeLabel = "new",
             badgeColor = "green"),
    menuItem("Charts", icon = icon("bar-chart-o"),
      menuSubItem("Trend Chart", tabName = "subitem1"),
      menuSubItem("Scatter Plot", tabName = "subitem2")),

     selectInput("filtervar", "Select zipcode", choices = vars),
     checkboxGroupInput("filteroptions", "Select zipcode", choices = varsfilter)))


body <- dashboardBody(
  tabItems(
    tabItem("subitem1", fluidRow(


      tabsetPanel(id = "tabselected",
      tabPanel("Visualization", uiOutput("Tab1")),
      tabPanel("Summary", uiOutput("Tab2"))))),


      tabItem("widgets",
      "Widgets tab content"),

      tabItem("dashboard",
      "Welcome!"),

      tabItem("subitem2",  fluidRow(


      tabsetPanel(id = "tabselected",
      tabPanel("Visualization", uiOutput("Tab3")),
      tabPanel("Summary", uiOutput("Tab4"))
    ))
    )))


shinyApp(
  ui = dashboardPage(header, sidebar, body),
 server = function(input, output,session) {

     kings_house_data = reactive({
     a = subset(final_kings_house_data, final_kings_house_data$zipcode == input$vars)
     return(a)
  })

        view_aggregate = reactive({kings_house_data() %>% group_by(view) %>% summarise(price = mean(price))})  
        condition_aggregate = reactive({kings_house_data() %>% group_by(condition) %>% summarise(price = mean(price))})
        floors_aggregate = reactive({kings_house_data() %>% group_by(floors) %>% summarise(price = mean(price))})
        month_aggregate = reactive({kings_house_data() %>% group_by(month) %>% summarise(price = mean(price))})


          output$Tab1 = renderUI({

                 mainPanel(fluidRow(
                 column(6,plotOutput(outputId = "viewplot", width="300px",height="300px")),
                 column(6,plotOutput(outputId = "conditionplot", width="300px",height="300px"))),
                 fluidRow(
                 column(6,plotOutput(outputId = "floorsplot", width="300px",height="300px")),
                 column(6,plotOutput(outputId = "monthplot", width="300px",height="300px"))))


    })

           output$Tab3 = renderUI({

                 mainPanel(fluidRow(
                 column(6,plotOutput(outputId = "view_scatterplot", width="300px",height="300px")),
                 column(6,plotOutput(outputId = "condition_scatterplot", width="300px",height="300px"))),
                 fluidRow(
                 column(6,plotOutput(outputId = "floors_scatterplot", width="300px",height="300px")),
                 column(6,plotOutput(outputId = "month_scatterplot", width="300px",height="300px"))))

    })


    output$viewplot = renderPlot({ plot(price/1000 ~ view , data = view_aggregate,
                                         title = "Avg Price Vs View", xlab = "View", ylab = "Avg Price in thousands", type = "o", col = "red")})
    output$conditionplot = renderPlot({ plot(price/1000 ~ condition, data = condition_aggregate,
                                         title = "Avg Price Vs Condition", xlab = "Condition", ylab = "Avg Price in thousands", type = "o", col = "red")})
    output$floorsplot = renderPlot({ plot(price/1000 ~ floors, data = floors_aggregate,
                                         title = "Avg Price Vs No. of Floors", xlab = "No. of Floors", ylab = "Avg Price in thousands", type = "o", col = "red")})
    output$monthplot = renderPlot({ plot(price/1000 ~ month, data = month_aggregate,
                                         title = "Avg Price Vs Month", xlab = "Month", ylab = "Avg Price in thousands", type = "o", col = "red")})
    output$view_scatterplot = renderPlot({ plot(price/1000 ~ view , data = kings_house_data(),
                                         title = "Price Vs View", xlab = "View", ylab = "Price in thousands", col = "red")})
    output$condition_scatterplot = renderPlot({ plot(price/1000 ~ condition, data = kings_house_data(),
                                         title = "Price Vs Condition", xlab = "Condition", ylab = "Price in thousands", col = "red")})
    output$floors_scatterplot = renderPlot({ plot(price/1000 ~ floors, data = kings_house_data(),
                                         title = "Price Vs No. of Floors", xlab = "No. of Floors", ylab = "Price in thousands", col = "red")})
    output$month_scatterplot = renderPlot({ plot(price/1000 ~ month, data = kings_house_data(),
                                         title = "Price Vs Month", xlab = "Month", ylab = "Price in thousands", col = "red")})

  })
}

Hi this error ( invalid 'envir' argument of type 'closure' ) means in R that you have given a function as an argument, when you really wanted the value of the function. In Shiny is this almost always that one have forgotten to add the brackets () after a reactive statment. In this case you have done it correctly for kings_house_data but you forgotten the brackets after view_aggregate , condition_aggregate , floors_aggregate and month_aggregate

Here is the corrected part of your code

output$viewplot = renderPlot({ plot(price/1000 ~ view , data = view_aggregate(),
                                    title = "Avg Price Vs View", xlab = "View", ylab = "Avg Price in thousands", type = "o", col = "red")})
output$conditionplot = renderPlot({ plot(price/1000 ~ condition, data = condition_aggregate(),
                                         title = "Avg Price Vs Condition", xlab = "Condition", ylab = "Avg Price in thousands", type = "o", col = "red")})
output$floorsplot = renderPlot({ plot(price/1000 ~ floors, data = floors_aggregate(),
                                      title = "Avg Price Vs No. of Floors", xlab = "No. of Floors", ylab = "Avg Price in thousands", type = "o", col = "red")})
output$monthplot = renderPlot({ plot(price/1000 ~ month, data = month_aggregate(),
                                     title = "Avg Price Vs Month", xlab = "Month", ylab = "Avg Price in thousands", type = "o", col = "red")})
output$view_scatterplot = renderPlot({ plot(price/1000 ~ view , data = kings_house_data(),
                                            title = "Price Vs View", xlab = "View", ylab = "Price in thousands", col = "red")})
output$condition_scatterplot = renderPlot({ plot(price/1000 ~ condition, data = kings_house_data(),
                                                 title = "Price Vs Condition", xlab = "Condition", ylab = "Price in thousands", col = "red")})
output$floors_scatterplot = renderPlot({ plot(price/1000 ~ floors, data = kings_house_data(),
                                              title = "Price Vs No. of Floors", xlab = "No. of Floors", ylab = "Price in thousands", col = "red")})
output$month_scatterplot = renderPlot({ plot(price/1000 ~ month, data = kings_house_data(),
                                             title = "Price Vs Month", xlab = "Month", ylab = "Price in thousands", col = "red")})

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM