繁体   English   中英

R Shiny - 在单独的表中显示线性、多项式和三次回归汇总

[英]R Shiny - Display Linear, Polynomial and Cubic Regression Summaries in Seperate Tables

我是 R 和 R Shiny 的新手。 我目前正在尝试创建一个 R Shiny 应用程序以显示年度线性 (y~x)、二次 (y~x^2+x) 和三次 (y~x^3x^2+x) 回归结果的摘要选定位置在选定时期内的海平面值。 时间段由用户从 slider 范围内选择开始年份和结束年份来确定,而位置由用户从下拉框中选择。 然后,我想从用户选择的数据中生成线性、二次和三次回归 model,并在单独的表格中显示每个回归摘要结果。

到目前为止,我已经设法从上面用户选择的参数中生成了一个过滤数据表,其中的列包含回归 model 的线性、二次和三次项。 但是,当我尝试使用LinearModel <- lm(input$var ~., data = dt)生成回归结果时,我已经从之前在此处其他地方提出的类似问题的答案中获取并修改了该结果,我收到错误Error in as.data.frame.default(data, optional = TRUE): cannot coerce class '"function"' to a data.frame

用于线性、二次和三次回归的数据表在我的代码中分别显示。 这是为了提供信息,也作为一个占位符,用相关的回归结果代替。

最后,我希望数据显示为整数,但是当我尝试使用my_data[,-1] <-round(my_data[,-1],0)将数据框中的数据转换为整数时,它仍然显示到小数点后两位?

非常感激

布莱恩。

library(shiny)

Year <- c(2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009)
Year2 <- Year^2
Year3 <- Year^3
Auckland <- c(1760, 1549, 1388, 1967, 1326, 1765, 1814, 1693, 1502, 1751)
Wellington <- c(2176, 3154, 1138, 1196, 2132, 3176, 4181, 5169, 3150, 4175)
Lyttelton <- c(2176, 3154, 1138, 1196, 2132, 3176, 4181, 5169, 3150, 4175)
my_data <- as.data.frame(cbind(Year,Year2,Year3, Auckland,Wellington, Lyttelton))
my_data[,-1] <-round(my_data[,-1],0) #Convert my_data to integers - doesn't work? 

ui <- fluidPage(
  titlePanel("New Zealand Annual Mean Sea Level (MSL) Regression Summary"),

  sidebarLayout(
    sidebarPanel(
      helpText("Annual Mean Sea Level Summary for various locations around NZ."),

      selectInput("var", 
                  label = "Choose a Location",
                  choices = c("Auckland",
                              "Lyttelton",
                              "Wellington"),
                  selected = "Auckland"),

      sliderInput("range", 
                  label = "Choose a start and end year:",
                  min = min(my_data$Year), max = max(my_data$Year), value = c(2003, 2008),sep = "",)
    ),
    mainPanel(
      tableOutput("LinearRegression"),
      tableOutput("QuadraticRegression"),
      tableOutput("CubicRegression")
    )
  )
)
server <- function(input, output) {

  output$LinearRegression <- renderTable({
    dt <- my_data[my_data$Year >= input$range[1] & my_data$Year <= input$range[2],]
    dt[,c(input$var,"Year")]
  },include.rownames=FALSE)
  #Below line doesn't work?
  #LinearModel <- lm(input$var ~ ., data = dt)

  output$QuadraticRegression <- renderTable({
    dt <- my_data[my_data$Year >= input$range[1] & my_data$Year <= input$range[2],]
    dt[,c(input$var,"Year","Year2")]
  },include.rownames=FALSE)
  #Below line doesn't work?
  #QuadraticModel <- lm(input$var ~ ., data = dt)

  output$CubicRegression <- renderTable({
    dt <- my_data[my_data$Year >= input$range[1] & my_data$Year <= input$range[2],]
    dt[,c(input$var,"Year","Year2","Year3")]
  },include.rownames=FALSE)
  #Below line doesn't work?
  #CubicModel <- lm(input$var ~ ., data = dt) 
}
shinyApp(ui, server)

您从各种renderXXXX调用中取出每个 model 的数据并使其成为反应式。 您可以使用 is 作为表渲染器和回归摘要输出的输入。 此外,来自lm的 output 不是表格,因此您不能使用renderTable来渲染它。 最后,将input$var的值插入lm调用时出现问题。

因此,我已将您的tableOutput("LinearRegression")更改为VerbatimTextOutput("LinearRegression") 然后,在服务器...

  filteredData <- reactive({
    dt <- my_data[my_data$Year >= input$range[1] & my_data$Year <= input$range[2],]
    dt[,c(input$var,"Year")]
    dt
  })

  output$LinearRegression <- renderPrint({
    lm(formula(paste(input$var, "~ .")), data = filteredData())
  })

您可以以类似的方式修改其他输出。

顺便说一句,您的数据并不整洁 强烈建议你这样做。 现在的一点点努力,将来会减轻你的痛苦。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM