2017-08-15 24 views
0

我有一個閃亮的應用程序,我希望用戶能夠上傳自己的數據並運行gbm模型。上傳的數據庫將是所有預測變量和響應變量的數據框。這將要求用戶輸入響應變量作爲被動輸入,或從列名稱列表中選擇它。這裏是我到目前爲止已經試過:有光澤的應用程序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 

回答

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) 
相關問題