R 闪亮:添加回归线而不更改数据
我正在编写一个闪亮的应用程序,可以调整绘图中的散布量。数据通过R 闪亮:添加回归线而不更改数据,r,ggplot2,shiny,R,Ggplot2,Shiny,我正在编写一个闪亮的应用程序,可以调整绘图中的散布量。数据通过rnorm()生成。我使用ggplot2显示绘图。我想根据复选框的值显示或隐藏回归线。这一切都有效 但是,无论何时显示或隐藏回归线(不改变误差量),数据都会重新生成,这是我不希望看到的。我把数据放在一个反应函数中,希望它能解决问题,但事实并非如此 我尝试过使用geom_smooth和geom_abline(在代码中注释掉),但两者都会导致数据重新生成 问题:我是否可以在不更改数据的情况下添加/删除回归线?也就是说,仅当滑块更改时,点的
rnorm()
生成。我使用ggplot2
显示绘图。我想根据复选框的值显示或隐藏回归线。这一切都有效
但是,无论何时显示或隐藏回归线(不改变误差量),数据都会重新生成,这是我不希望看到的。我把数据放在一个反应函数中,希望它能解决问题,但事实并非如此
我尝试过使用geom_smooth
和geom_abline
(在代码中注释掉),但两者都会导致数据重新生成
问题:我是否可以在不更改数据的情况下添加/删除回归线?也就是说,仅当滑块更改时,点的位置才应更改,而复选框不应更改
库(闪亮)
图书馆(GG2)
种子(42)
ui这里的问题是,您将您的reactive
放在renderPlot
中,这样每次renderPlot
无效时,代码都会重新运行
相反,您应该将您的被动
外部移动到主服务器
功能中。然后,只有当其值由于input$stdev
中的更改而无效时,它才会运行
但是,添加回归线时,始终必须重新渲染ggplot
。据我所知,如果不重新渲染整个绘图,就无法在ggplot
中添加一行。这里的问题是,您将反应性
放在渲染图
中,这样每次渲染图
无效时,代码都会重新运行
相反,您应该将您的被动
外部移动到主服务器
功能中。然后,只有当其值由于input$stdev
中的更改而无效时,它才会运行
但是,添加回归线时,始终必须重新渲染ggplot
。据我所知,如果不重新渲染整个绘图,就无法在ggplot
中添加一行。就像我在评论中写的那样,另一种方法是在reactive函数中设置set.seed()
在您的反应功能内部是一个不同的环境。你的种子不再在那里被定义,。。。如果你把种子放在反应函数中,它应该会工作。
有关作用域的高级详细信息,请参见此处:
更好理解的示例:
library(shiny)
set.seed(1)
print("set seed outside server function:")
print(rnorm(1))
ui <- fluidPage(
)
server <- function(input, output, session) {
observe({
print("new environment seed not valid")
print(rnorm(1))
})
observe({
print("new environment but set seed here as well")
set.seed(1)
print(rnorm(1))
})
}
shinyApp(ui, server)
库(闪亮)
种子(1)
打印(“在服务器功能外设置种子:”)
打印(格式(1))
ui就像我在评论中写的一样,另一种方法是在反应函数中设置set.seed()
在您的反应功能内部是一个不同的环境。你的种子不再在那里被定义,。。。如果你把种子放在反应函数中,它应该会工作。
有关作用域的高级详细信息,请参见此处:
更好理解的示例:
library(shiny)
set.seed(1)
print("set seed outside server function:")
print(rnorm(1))
ui <- fluidPage(
)
server <- function(input, output, session) {
observe({
print("new environment seed not valid")
print(rnorm(1))
})
observe({
print("new environment but set seed here as well")
set.seed(1)
print(rnorm(1))
})
}
shinyApp(ui, server)
库(闪亮)
种子(1)
打印(“在服务器功能外设置种子:”)
打印(格式(1))
ui您应该将您的reactive
移动到renderPlot
之外。然后,只有当其值无效时,才会运行它。但是,您必须始终重新渲染ggplot。这就成功了。我认为这一定是显而易见的。我尝试了各种排列,除了那一种。谢谢。您也可以在调用rnorm()
之前使用set.seed()
,这样您的“随机值”是固定的,…@BigDataScientist我为MWE包括了set.seed()
,但您建议set.seed()
(使用时)应该在反应()中
功能而不是其当前位置?我的理解是,种子将在应用程序的初始启动时设置,因此应适用于所有后续交互。第一部分是正确的。在我的写作中有点不清楚,sry。在您的反应功能内部是一个不同的环境。你的种子不再在那里被定义,。。。如果您将种子放在反应函数中,它应该可以工作,是的,…。您应该将反应
移动到渲染图
之外。然后,只有当其值无效时,才会运行它。但是,您必须始终重新渲染ggplot。这就成功了。我认为这一定是显而易见的。我尝试了各种排列,除了那一种。谢谢。您也可以在调用rnorm()
之前使用set.seed()
,这样您的“随机值”是固定的,…@BigDataScientist我为MWE包括了set.seed()
,但您建议set.seed()
(使用时)应该在反应()中
功能而不是其当前位置?我的理解是,种子将在应用程序的初始启动时设置,因此应适用于所有后续交互。第一部分是正确的。在我的写作中有点不清楚,sry。在您的反应功能内部是一个不同的环境。你的种子不再在那里被定义,。。。如果你把种子放在反应函数中,它应该会起作用,是的,….在某一点上,我在反应函数中绘制了我的大部分绘图,然后在外部添加了geom_smooth
层,沿着绘图的线条,在某一点上,我在反应函数中绘制了我的大部分绘图,然后在外部添加了geom_smooth
层,沿着绘图的线条