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创建一个反应式表达式。谢谢你提示将其存储为框架。我不知道你能做到!!