[:错误的维数(执行Shiny R代码时)错误

时间:2017-02-16 18:40:51

标签: r shiny

执行闪亮代码时,我收到错误为“警告:grepl:无效'模式'参数错误”和“错误[维度数量不正确”(在UI中)。请帮忙。下面是代码的片段。当我不评论最后一行时,我收到错误

  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 个答案:

答案 0 :(得分:1)

是的,那更好。 有多个错误: 我们不应该为你调试它,但这里有一些指针。 这应该可以帮助你找到它们。

1) 您正在使用:input$x_axisinput$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()禁止了这一点。

编辑:问题更新:

您尝试按字符串构建lm()公式,您可以在闪亮之外进行测试:无效。 您应该使用formula()函数并提出类似的内容:

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