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)

一个垃圾测试表明这能够创建动态模型(尽管需要在其他领域进行一些调整):

用户界面

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 回答