2014-10-21 93 views
0

我正在嘗試爲項目構建一個閃亮的應用程序,並且我認爲我全部完成了,一切似乎都正常工作,但我在運行應用程序時不斷收到此錯誤:控制檯中的閃亮的應用程序錯誤

Error in grep(input$predict, columns) : invalid 'pattern' argument 
Error in parse(text = x) : <text>:2:0: unexpected end of input 
1: Ozone ~ 
^
Error in parse(text = x) : <text>:2:0: unexpected end of input 
1: Ozone ~ 
^

這裏是我的ui.R代碼:

library(shiny) 

# Define UI for airquality data application 
shinyUI(pageWithSidebar(

    # Application title 
    headerPanel("Air Quality Relationships & Predictions"), 

    sidebarPanel(
      selectInput("outcome", "Outcome:", list("O Zone" = "Ozone", 
                "Solar Radiation" = "Solar.R", 
                "Wind" = "Wind", 
                "Temperature" = "Temp")), 
      uiOutput("predictor"), 
      uiOutput("slider"), 
      h5(textOutput("guess")) 
    ), 

    mainPanel(
      plotOutput("ioPlot") 
    ) 
)) 

這裏是server.R代碼:

library(shiny) 
    library(datasets) 

    #import dataset 
    airData <- airquality 

    #make list of columns for dropdowns 
    columns <- list("O Zone" = "Ozone", "Solar Radiation" = "Solar.R", "Wind" = "Wind", "Temperature" = "Temp") 

    # Define server logic 
    shinyServer(function(input, output, session) { 

      #set dropdown so it only shows 3 remaining columns, won't compare a variable to itself 
      output$predictor = renderUI({ 
        outc <- input$outcome 
        selectInput("predict", "Predictor:", columns[-grep(outc,columns)]) 
      }) 

      #setup the slider for the current selections, default to mean, set max and min to the observed max and min 
      output$slider = renderUI({ 
        slLabel = paste("Adjust to predict ", names(columns[grep(input$outcome,columns)]), "using this value for ", names(columns[grep(input$predict,columns)]), ":") 
        slVal = round(mean(airData[,input$predict], na.rm=TRUE),0) 
        slMin = round(min(airData[,input$predict], na.rm=TRUE),0) 
        slMax = round(max(airData[,input$predict], na.rm=TRUE),0) 
        sliderInput('slide', slLabel, value = slVal, min = slMin, max = slMax, step=1,) 
      }) 

      #create formula for plot 
      formulaText <- reactive({ 
        paste(input$outcome, " ~ ", input$predict) 
      }) 

      #create text for prediction 
      output$guess <- renderText({ 
        fit <- lm(as.formula(formulaText()), data=airData) 
        slp <- fit$coeff[2] 
        yint <- fit$coeff[1] 
        predout <- round(yint + slp * input$slide,2) 
        paste("Predicted outcome for ", names(columns[grep(input$outcome,columns)]), ": ", predout) 
      }) 

      #create plot and fitted line 
      output$ioPlot <- renderPlot({ 
        fit <- lm(as.formula(formulaText()), data=airData) 
        plot(as.formula(formulaText()), 
          data = airData, xlab=names(columns[grep(input$predict,columns)]), ylab=names(columns[grep(input$outcome,columns)])) 
        abline(fit, col="red") 
        title(main= paste(names(columns[grep(input$outcome,columns)]), " vs. ", names(columns[grep(input$predict,columns)]))) 
      }) 
    }) 

回答

0

我認爲這個問題是由於您進行子集columns使predictselectInput

試試這個

output$predictor = renderUI({ 
      selectInput("predict", "Predictor:", columns[columns!=input$outcome]) 
}) 

這應該給你的一切從columnslist除了任何被選定爲input$outcome的方式。

編輯 我只注意到你也使用grep多次,以粘貼輸出一些文字。相反,你應該使用這樣的語句:

xlab=names(columns[columns==input$predict]) 

也就是說,你不需要grep你可以只子集columns直接。

相關問題