2017-02-16 34 views
0

Я получаю ошибки как «Предупреждение: ошибка в grepl: invalid» шаблон «аргумент» и «Ошибка в [: неправильное количество измерений» (в пользовательском интерфейсе)) при выполнении блестящего кода. пожалуйста помоги. ниже - фрагмент кода. Я получаю ошибку, когда я не комментирую последнюю строкуОшибка в [: неправильное количество измерений (при выполнении кода Shiny R)

library(MASS) 
    library(shinythemes) 
    library(shiny) 
    library(ggplot2) 

    mass.tmp <- data(package = "MASS")[3] 
    mass.datasets <- as.vector(mass.tmp$results[,3]) 

    ui <- fluidPage(

    theme = shinytheme("superhero"), 
    titlePanel("Linear Regression Modelling"), 
    sidebarLayout(
     sidebarPanel(
     selectInput("dsname", "Dataset:",choices = c(mass.datasets)), 
     uiOutput("y_axis"), 
     uiOutput("x_axis") 
    )  , 
     mainPanel(
     tags$br(), 
     tags$br(), 
     "R-squared:", 
     tags$span(tags$b(textOutput("rsquared")),style="color:blue") 
    ) 

    ) 
) 
    server <- function(input, output) { 

    output$x_axis <- renderUI({ 
     col_opts <- get(input$dsname) 
     selectInput("x_axis2", "Independent Variable:", choices = c(names(col_opts))) 
    }) 

    cols2 <- reactive({ 
     col_opts2 <- get(input$dsname) 
     #names(col_opts2)[!grepl(input$x_axis2, names(col_opts2))] 
    }) 

    output$y_axis <- renderUI({ 
     selectInput("y_axis2", "Dependent Variable:", choices = c(names(cols2()))) 
    }) 

    model <- reactive({ 
     #lm(input$dsname[,names(input$dsname) %in% input$y_axis2] ~ input$dsname[,names(input$dsname) %in% input$x_axis2]) 
     #tmp <- paste(input$y_axis2,"~",input$x_axis2,sep = " ") 

     lm(input$y_axis2 ~ input$x_axis2 , data = input$dsname) 
    }) 

    model_summary <- reactive({summary(model())}) 
    output$rsquared <- renderText({ model_summary()$r.squared }) 

    } 

    shinyApp(ui = ui, server = server) 
+1

Pls обеспечить полностью воспроизводимый пример. – BigDataScientist

+0

Я отредактировал мое сообщение. Пожалуйста, направляйте. –

ответ

1

Да, это лучше. Есть несколько ошибок: Мы не должны отлаживать все это для вас, но здесь есть несколько указателей. Это должно помочь вам найти их всех.

1) Вы используете: input$x_axis и input$y_axis, но определили его с помощью «2» в конце. Так что адаптируй это.

2) Вы должны определить:

cols2 <- reactive({ col_opts2 <- get(input$dsname) names(col_opts2)[!grepl(input$x_axis2, names(col_opts2))] })

вне функции renderUI.

3) Кроме того, там, кажется, что-то не так с этим фрагментом: names(col_opts2)[!grepl(input$x_axis2, names(col_opts2))]

Наконец, я хотел бы проверить, если вы производите NULLS и запретить что !is.null().

Edit: обновление Вопрос:

Вы пытались построить lm() формулу строк, которые вы можете испытать за пределами блестящей: Не будет работать. Вы должны использовать функцию formula() и придумать что-нибудь вроде:

lm(formula(paste(input$y_axis2, input$x_axis2, sep =" ~ ")), data = get(input$dsname)) 
+0

Теперь я получаю ошибку "invalid 'envir' аргумент типа 'character'" при выполнении функции lm. ---- model <- reactive ({ lm (input $ y_axis2 ~ input $ x_axis2, data = input $ dsname) }) –

+0

может обновить код, затем – BigDataScientist

+0

Код обновлен. После отладки, я думаю, что есть ошибка в lm-функции. Я пробую разные вещи, но не получилось. –