4

光沢のある単純な線形回帰のアプリを作成しています。変数名をモデルに自動的に渡したい。ユーザーからの変数入力を試みました。server.R のコードは

lm(paste(input$dependent," ~ ",input$independent), data=data1())

lm(paste0(input$dependent) ~ paste0(input$independent), data=data1())

また、以下の構文も試しました。

lm(names(data1()[2]) ~ names(data1()[1]) , data=data1())

これらはすべて機能していません...
モデルに変数名を渡すにはどうすればよいですか?
前もって感謝します...

4

2 に答える 2

7

あなたの例は、あなたが実行しているエラーを理解するのに十分ではありませんが、これでうまくいくはずです:

    lm(as.formula(paste(input$dependent," ~ ",paste(input$independent,collapse="+"))),data=dat)

ジャンクテストは、これが動的モデルを作成できることを示しています(ただし、他の領域で少し調整が必要です):

ui.R

library(shiny)

shinyUI(pageWithSidebar(
  headerPanel("Test Shiny App"),

  sidebarPanel(
    selectInput("dependent", "Dependent Variable:", c("x","y","z")),
    uiOutput("independent")
  ),

  mainPanel(tableOutput("regTab"))
))

サーバー.R

library(shiny)

dat <- data.frame(x=rnorm(100),y=rnorm(100),z=rnorm(100))

shinyServer(function(input, output, session) {

  output$independent <- renderUI({
    checkboxGroupInput("independent", "Independent Variables:",names(dat)[!names(dat) %in% input$dependent],names(dat)[!names(dat) %in% input$dependent])
  })

  runRegression <- reactive({
    lm(as.formula(paste(input$dependent," ~ ",paste(input$independent,collapse="+"))),data=dat)
  })

  output$regTab <- renderTable({
    if(!is.null(input$independent)){
      summary(runRegression())$coefficients
    } else {
      print(data.frame(Warning="Please select Model Parameters."))
    }
  })

})
于 2013-09-15T23:24:18.290 に答える
1

基本的に、式オブジェクトをlm呼び出しに渡す必要があります。を使用するよりも簡単だと思いますpaste0。問題はformula光沢以上のものです。これを行うには他の方法があります。

predictors = paste(input$independent,collapse="+")
fml = as.formula(sprintf('%s ~ %s', input$dependent, predictors))
fit = lm(fml, data=dat)
于 2016-03-14T22:55:28.750 に答える