R 闪亮:如何引用随机生成的数据集而不重新生成?

R 闪亮:如何引用随机生成的数据集而不重新生成?,r,shiny,regression,R,Shiny,Regression,我起草了这个应用程序,以显示歪斜残差的效果。用户可以指定截距、斜率、样本大小和剩余偏度 输出为散点图。我想添加一个回归输出。但是,我不知道该如何编写该部分: output$reg01 <- renderPrint({ summary(lm(1:10~rnorm(10))) 目前,我只是在那里填充一个假回归,以确保我的UI至少可以正常工作。但最终我希望它从我的数据中读取y和x;我尝试了lmy~x,data=myData,但没有成功。就像myData被限制在第一个renderPlot

我起草了这个应用程序,以显示歪斜残差的效果。用户可以指定截距、斜率、样本大小和剩余偏度

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

  output$reg01 <- renderPrint({
  summary(lm(1:10~rnorm(10)))
目前,我只是在那里填充一个假回归,以确保我的UI至少可以正常工作。但最终我希望它从我的数据中读取y和x;我尝试了lmy~x,data=myData,但没有成功。就像myData被限制在第一个renderPlot函数中一样

关于如何在每次运行中保持模拟数据恒定,以便我可以使用不同的绘图/制表功能来引用它,有什么帮助吗?我的猜测是关于反应性的,但我不确定如何将数据集放入其中

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)

您可以将数据生成移动到反应容器中。无功值可用于生成其他输出或无功。他们只有在输入发生变化时才重新计算

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)

我还不是100%清楚你想要什么。所以,问题不是你不知道如何显示输出,对吗?问题在于它的再生。我可能知道你的意思,但我不确定。你能澄清一下吗?当然可以。在服务器代码中,我使用内部生成的数据集创建了散点图输出$scatter。我想在下面添加一些统计输出,调用相同的数据集。我不想再次将数据模拟代码粘贴到输出$reg01中,担心它会随机创建一个完全不同的数据集。希望对你有所帮助,谢谢@哈克-R,谢谢!我添加了一个最小错误生成示例,减少了统计数据。我怎样才能让数据显示在底部?谢谢只需在myData之后添加以下行assignmyData、myData、envir=.GlobalEnv如果希望myData也自动更新,则需要为dataframeWorked创建一个反应式表达式。谢谢你提示将其存储为框架。我不知道你能做到!!