Biểu thức phản ứng trong các thay đổi lan truyền sáng bóng, nơi chúng cần phải đi. Chúng ta có thể ngăn chặn một số hành vi này với isolate
, nhưng chúng ta có thể ngăn chặn các thay đổi được nhân giống dựa trên biểu thức logic của chính chúng ta không?Phản ứng có điều kiện Sáng bóng
Ví dụ tôi đưa ra là một phân tán đơn giản và chúng tôi vẽ một hình chữ thập với abline
nơi người dùng nhấp vào. Thật không may, Shiny xem xét kết quả là một cốt truyện mới và giá trị nhấp chuột của chúng tôi được đặt lại thành NULL
... mà lần lượt được coi là bản cập nhật cho giá trị được truyền như bình thường. Cốt truyện được vẽ lại và NULL
được chuyển đến cả hai đối số của abline
.
Hack của tôi (nhận xét bên dưới) là đặt điều kiện trong cuộc gọi renderPlot
cập nhật một số biến không phản ứng đối với tọa độ vẽ, chỉ khi giá trị nhấp chuột không phải là NULL
. Điều này làm việc tốt cho các lô nhỏ, nhưng nó thực sự dẫn đến cốt truyện được vẽ hai lần.
Cách nào tốt hơn để thực hiện việc này? Có cách nào chính xác cách không?
tập tin Server:
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)
})
})
UI file:
library(shiny)
shinyUI(
basicPage(
plotOutput("plot", click = "click", height = "400px", width = "400px")
)
)
Kể từ khi tuyên bố 'if' của bạn dường như để làm những gì bạn muốn với ví dụ này nó có thể là tốt để cung cấp một ví dụ khi nó không hoạt động –
' renderPlot' có phần tĩnh, để làm những gì bạn muốn, bạn nên sử dụng các thư viện nâng cao hơn như 'rCharts' hoặc' highcharter' chỉ để gọi những thay đổi đó –
Giống như [this] (http://shiny.rstudio.com/reference/shiny/latest/actionButton.html)? – alistaire