gpt4 book ai didi

r - 条件 react 性 Shiny

转载 作者:行者123 更新时间:2023-12-04 10:16:17 28 4
gpt4 key购买 nike

Shiny 中的响应式(Reactive)表达式将更改传播到需要去的地方。我们可以使用 isolate 来抑制一些这种行为。 ,但是我们可以抑制基于我们自己的逻辑表达式传播的更改吗?

我给出的例子是一个简单的散点图,我们用 abline 绘制了一个十字准线。用户点击的地方。不幸的是,Shiny 认为结果是一个新图,我们的点击值被重置为 NULL ...这反过来又被视为对要像往常一样传播的值的更新。绘图被重绘,并且 NULL传递给 abline 的两个参数.

我的黑客(在下面注释掉)是在 renderPlot 中放置一个条件仅当点击值不是 NULL 时才更新绘图坐标的一些非 react 变量的调用.这适用于琐碎的情节,但它实际上导致情节被绘制两次。

有什么更好的方法来做到这一点?有正确的方法吗?

服务器文件:

library(shiny)

shinyServer(function (input, output)
{
xclick <- yclick <- NULL
output$plot <- renderPlot({
#if (!is.null(input$click$x)){
xclick <<- input$click$x
yclick <<- input$click$y
#}
plot(1, 1)
abline(v = xclick, h = yclick)
})
})

用户界面文件:
library(shiny)

shinyUI(
basicPage(
plotOutput("plot", click = "click", height = "400px", width = "400px")
)
)

最佳答案

Winston 将此问题称为“状态”累积——您不仅要显示当前数据,还要显示前一个图生成的内容(了解此问题的最佳位置是 https://www.rstudio.com/resources/videos/coordinated-multiple-views-linked-brushing/)

基本思想是创建您自己的一组 react 值,并在用户单击绘图时更新它们。直到下一次单击它们才会失效,因此您不会出现循环行为。

library(shiny)

shinyApp(
shinyUI(basicPage(plotOutput("plot", click = "click"))),
function(input, output) {
click <- reactiveValues(x = NULL, y = NULL)
observeEvent(input$click, {
click$x <- input$click$x
click$y <- input$click$y
})

output$plot <- renderPlot({
plot(1, 1)
abline(v = click$x, h = click$y)
})
}
)

关于r - 条件 react 性 Shiny ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37907927/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com