在Shiny中,响应式表达式会将更改传播到需要的位置。我们可以使用
我提供的示例是一个简单的散点图,我们用
我的hack(下面被注释掉了)是在
有更好的方法吗?有正确的方式吗?
服务器文件:
isolate
来抑制一些行为,但是我们能否根据自己的逻辑表达式抑制传播的更改呢?我提供的示例是一个简单的散点图,我们用
abline
在用户点击处绘制十字线。不幸的是,Shiny认为结果是一个新的图,我们的点击值被重置为NULL
...这反过来又被视为要传播的值的更新。图形被重新绘制,并且NULL
被传递到abline
的两个参数中。我的hack(下面被注释掉了)是在
renderPlot
调用中放置一个条件,只有当点击值非NULL
时,才会更新一些非响应式变量以进行绘图坐标。对于简单的情况,这很好用,但实际上这会导致图形被重绘。有更好的方法吗?有正确的方式吗?
服务器文件:
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")
)
)
renderPlot
有些静态,如果想要实现你想要的效果,你应该使用更高级的库,比如rCharts
或者highcharter
来调用这些变化。 - Pork Chop