2014-10-21 4 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 непосредственно.

Смежные вопросы