2016-10-01 9 views
0

我剛剛使用Shiny,並且在將反應值添加到現有數據框時遇到了一些問題。將點擊事件的反應值添加到現有數據框並更新圖

我想繪製散點圖與迴歸線使用一些已有的數據,並用用戶點擊進行更新。我找到了一個有用的例子,但我無法弄清楚如何在數據框中存儲反應值以更新迴歸線。

這是我試過的。謝謝。

library(shiny) 

ui <- basicPage(
    plotOutput("plot1", click = "plot_click"), 
    verbatimTextOutput("info"), 
    actionButton("updateplot", "Update Plot:"), 
    actionButton("refreshlinie", "Rlinie"), 
) 

server <- function(input, output) { 

    var1 <- c(3, 10, 15, 3, 4, 7, 1, 12, 8, 18, 20, 4, 4, 5, 10) 
    var2 <- c(4, 10, 12, 17, 15, 20, 14, 3, 4, 15, 12, 5, 5, 6, 2) 
    df <- cbind (var1, var2) 

    val <- reactiveValues(clickx = NULL, clicky = NULL, data = NULL) 
    observe({ 
    input$plot_click 
    isolate({ 
     val$clickx = c(val$clickx, input$plot_click$x) 
     val$clicky = c(val$clicky, input$plot_click$y) 
     }) 

    # isolate({ 
     # val$data = rbind(df, c(val$clickx, val$clicky)) 
    #}) 

    }) #adding clicks to list 


    output$plot1 <- renderPlot({ 
    plot(val$data[,1], val$data[,2]) 
    input$updateplot 
    isolate({ 
     points(val$clickx, val$clicky) 
    }) 
     if(input$refreshlinie) 
    abline(lm(val$data[,1]~ val$data[,2])) 
    }) 

    output$info <- renderText({ 
    paste0("x = ", val$clickx, ", y = ",val$clicky, "\n") 
    }) 

} 

shinyApp(ui, server) 

回答

0

其基本思想是使用預先存在的數據初始化反應值。遲到添加新的點添加到反應值。

貝婁我把你的代碼的簡化版本更新vla$data中的點並正確更新abline

ui <- basicPage(
    plotOutput("plot1", click = "plot_click"), 
    actionButton("updateplot", "Update Plot:"), 
    actionButton("refreshlinie", "Rlinie"), 
    verbatimTextOutput("info") 
) 

server <- function(input, output) { 

    var1 <- c(3, 10, 15, 3, 4, 7, 1, 12, 8, 18, 20, 4, 4, 5, 10) 
    var2 <- c(4, 10, 12, 17, 15, 20, 14, 3, 4, 15, 12, 5, 5, 6, 2) 
    n <- length(var1) 

    # initialize reactive values with existing data 
    val <- reactiveValues(clickx = NULL, clicky = NULL, data = cbind (var1, var2)) 

    observe({ 
    input$plot_click 
    isolate({ 
     # save new points added 
     val$clickx = c(val$clickx, input$plot_click$x) 
     val$clicky = c(val$clicky, input$plot_click$y) 
     # add new points to data 
     val$data <- rbind(val$data, cbind(input$plot_click$x, input$plot_click$y)) 
    }) 
    }) 


    output$plot1 <- renderPlot({ 
    input$updateplot 
    plot(val$data[,1], val$data[,2]) 
    if(input$refreshlinie) 
     # I changed the order of the variables to create the model. 
     abline(lm(val$data[,2]~ val$data[,1])) 
    }) 

    output$info <- renderText({ 
    input$plot_click 
    paste0("x = ", val$clickx, ", y = ",val$clicky, "\n") 
    }) 

} 

shinyApp(ui, server) 
+0

謝謝。它完美的工作,我終於明白了代碼。不幸的是,我沒有足夠的經驗來實現這個項目。我發佈了關於這個應用程序的另一個問題:[鏈接](http://stackoverflow.com/questions/39832436/update-data-frame-of-click-data-with-user-input)。也許你可以幫助我解決這個我不知道的最後一件事。 –

相關問題