闪亮:如何在不重新生成随机数据集的情况下引用它?

时间:2018-10-01 18:52:16

标签: r shiny regression

我起草了此应用程序,以显示偏斜残差的影响。用户可以指定截距,斜率,样本大小和残余偏度。

输出为散点图。我想添加一个回归输出。但是,我不知道如何编写该部分:

  output$reg01 <- renderPrint({
  summary(lm(1:10~rnorm(10)))

当前,我只是在这里填充一个伪造的回归,以确保我的UI至少可以正常工作。但是最终,我希望它从myData中读取y和x。我尝试lm(y〜x,data = myData)没有成功。好像myData局限于第一个renderPlot()函数一样。

任何有关如何在每次运行中保持模拟数据恒定的帮助,以便我可以使用不同的plot / tabulate函数来引用它吗?我的猜测是关于react()的事,但我不确定如何将数据集放入其中。

library(shiny)
library(sn)

ui <- fluidPage(
  numericInput(inputId= "n", "Sample size", value=100),
  numericInput(inputId="b0", "Intercept",   value=2.5),
  numericInput(inputId="b1", "Slope",       value=5),
  numericInput(inputId="skew", "Skewness",  value=0),
  plotOutput(outputId = "scatter"),
  verbatimTextOutput(outputId = "reg01")
)

server <- function(input, output){
  output$scatter <- renderPlot({
    # Creating the data
    x   <- rnorm(input$n)
    res <- rsn(n=input$n, xi=0, omega=15, alpha=input$skew)
    y   <- input$b0 + input$b1*x + res
    myData <- data.frame(x,y)
    # Generating the plot
    plot(x,y,pch=16,col="#00000050")
    abline(input$b0,input$b1,col="#FF000040",lwd=10)
    lines(loess.smooth(x,y,span=0.6),col="#00dd55",lty=3,lwd=4)
    abline(lm(y~x),col="#4488aa",lwd=4)
  })
  output$reg01 <- renderPrint({
    summary(lm(1:10~rnorm(10)))
  })
}

shinyApp(ui=ui, server=server)

这是一个最小的(不工作的)示例,其中没有所有统计信息:

library(shiny)

ui <- fluidPage(
  numericInput(inputId= "meanX", "mean for x", value=10),
  numericInput(inputId= "meanY", "mean for y", value=10),
  plotOutput(outputId = "scatter"),
  verbatimTextOutput(outputId = "reg01")
)

server <- function(input, output){
  output$scatter <- renderPlot({
    # Creating the data
    x   <- rnorm(100, input$meanX, 1)
    y   <- rnorm(100, input$meanY, 1)
    myData <- data.frame(x,y)
    # Generating the plot
    plot(x,y,pch=16,col="#00000050")
  })
  output$reg01 <- renderPrint({
    summary(lm(y ~ x, data=myData))
  })
}

shinyApp(ui=ui, server=server)

1 个答案:

答案 0 :(得分:1)

您可以将数据生成移动到反应容器中。电抗值可用于生成其他输出或电抗。他们只会在输入更改时重新计算。

library(shiny)

ui <- fluidPage(
  numericInput(inputId= "meanX", "mean for x", value=10),
  numericInput(inputId= "meanY", "mean for y", value=10),
  plotOutput(outputId = "scatter"),
  verbatimTextOutput(outputId = "reg01")
)

server <- function(input, output){
  mydata_storage = reactive({
    # Creating the data
    x   <- rnorm(100, input$meanX, 1)
    y   <- rnorm(100, input$meanY, 1)
    myData <- data.frame(x,y)
  })

  output$scatter <- renderPlot({
    mydata = mydata_storage()
    plot(mydata$x,mydata$y,pch=16,col="#00000050")
  })

  output$reg01 <- renderPrint({
    mydata = mydata_storage()
    summary(lm(y ~ x, data=mydata))
  })
}

shinyApp(ui=ui, server=server)