我正在创建一个使用闪亮的简单线性回归的应用程序。我想自动将变量名称传递给模型。我试过用户的变量输入。 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())
这些都不起作用......
如何将变量名传递给模型?
提前谢谢......
答案 0 :(得分:4)
你的例子不足以让我理解你遇到的错误,但我认为这应该可以解决问题:
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"))
))
server.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."))
}
})
})
答案 1 :(得分:0)
您基本上需要将公式对象传递给lm
调用。
我发现这比仅使用paste0
更容易。问题更多的是关于formula
而不是闪亮,还有其他方法可以做到这一点。
predictors = paste(input$independent,collapse="+")
fml = as.formula(sprintf('%s ~ %s', input$dependent, predictors))
fit = lm(fml, data=dat)