【问题标题】:Reactive response variable for gbm model formula in shiny app闪亮应用程序中 gbm 模型公式的反应性响应变量
【发布时间】:2018-01-23 23:12:57
【问题描述】:

我有一个闪亮的应用程序,我希望用户能够上传他们自己的数据并运行 gbm 模型。上传的数据库将是所有预测变量加上响应变量的数据框。这将要求用户输入响应变量作为响应输入,或从列名列表中选择它。到目前为止,这是我尝试过的:

library(shiny)
library(gbm)


ui <- fluidPage(
  fluidRow(
    column(3,textInput("response","Enter the response variable",value="Petal.Width")),
    column(9,verbatimTextOutput("summary"))
  )
)
server <- function(input, output, session) {


  output$summary <- renderPrint({
 model<-gbm(input$response~., data=iris,
               distribution="gaussian",
               bag.fraction=.5,
               n.trees=1000,
               interaction.depth=4,
               shrinkage=0.01,
               n.minobsinnode=10,
               verbose=FALSE)
    summary(model)

  })



}


shinyApp(ui=ui,server=server)

但我得到一个可变长度不同的错误:

Warning: Error in model.frame.default: variable lengths differ (found for 'Sepal.Length')
Stack trace (innermost first):
    90: model.frame.default
    89: model.frame
    88: eval
    87: eval
    86: gbm
    85: renderPrint [D:/Dropbox/PhD/Nitrate Mapping Project/USGS Project/SOPs and Test Data/1SE SOP/gbm_reac_response.R#15]
    84: func
    83: eval
    82: eval
    81: withVisible
    80: evalVis
    79: utils::capture.output
    78: paste
    77: origRenderFunc
    76: output$summary
     1: runApp

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    您可以使用reactive() 对象将您的用户输入转换为formula 对象以传递给gbm()。像这样的东西会起作用....

    library(shiny)
    library(gbm)
    
    
    ui <- fluidPage(
        fluidRow(
            column(3,textInput("response","Enter the response variable",
                               value="Petal.Width")),
            column(9,verbatimTextOutput("summary"))
        )
    )
    server <- function(input, output, session) {
    
        f <- reactive({ as.formula(paste(input$response, "~ .")) })
    
        output$summary <- renderPrint({
            model<-gbm(f(), data=iris,
                       distribution="gaussian",
                       bag.fraction=.5,
                       n.trees=1000,
                       interaction.depth=4,
                       shrinkage=0.01,
                       n.minobsinnode=10,
                       verbose=FALSE)
            summary(model)
    
        })
    
    }
    
    
    shinyApp(ui=ui,server=server)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-04
      • 2017-03-10
      • 2017-10-18
      相关资源
      最近更新 更多