2017-01-18 7 views
1

私は対話的なk-meansプロットを作成しようとしていますが、入力の効果を見ることができます(純粋にランダムな選択ではなく中心を指定するなど)光沢のあるコードで。私はどのようにポイントを選択し、私のアプリが中心として使用するように覚えているかを理解しようとしています。私は反応的なコードでこれを行う方法を探してきましたが、これまでに試したことはすべて失敗しました。私の現在の作業コードは以下の通りです:Shinyのプロット上で選択した点を記憶している

# Pre Work 
library(ggfortify) 
dsnames <- names(iris[1:4]) 
cb_options <- list() 
cb_options[dsnames] <- dsnames 

# UI 
shinyUI <- fluidPage(
    titlePanel("Interactive K-Means Clustering Using Iris Dataset"), 
    sidebarPanel(
    numericInput("numCenter", label=h4("Centers for k-means:"), min=2, max=30, value=3), 
    selectInput("xaxisGrp","X-Axis:", c("1"="1","2"="2"), choices=cb_options), 
    selectInput("yaxisGrp","Y-Axis:", c("1"="1","2"="2"), choices=cb_options), 
    tableOutput("info") 
), 
    mainPanel(
    plotOutput("plot1", click="plot_click", dblclick="plot_dbl") 
) 
) 

# Server 
shinyServer <- function(input, output, session) { 

    iris_k <- reactive({ 
    kmeans(iris[1:4], centers=input$numCenter) 
    }) 

    output$plot1 <- renderPlot({ 
    ggplot() + geom_point(data=iris, aes_string(input$xaxisGrp, input$yaxisGrp), colour=iris_k()$cluster) 
    }) 

    output$info <- renderTable({ 
    nearPoints(iris, input$plot_click, xvar=input$xaxisGrp, yvar=input$yaxisGrp)[,c(input$xaxisGrp, input$yaxisGrp)] 
    }) 

} 

# ShinyApp function call 
shinyApp(ui=shinyUI, server=shinyServer) 

どうすればいいですか?

答えて

1

私は、作業コードにいくつかの欠陥を見つけた後、これを理解することができました。この回答が他の人に役立つなら、私は喜んでいます。新しいShiny Serverコードは、私がその使い方を誤解していたため、以前は動作していなかったreactiveValues()を使用しています。新しいコードセグメントは次のとおりです。

v <- reactiveValues(
    selectedData = NULL 
    ) 

    observeEvent(input$plot_dbl, { 
    X1 <- nearPoints(iris, input$plot_dbl) 
    if (is.null(v$selectedData)) { 
     v$selectedData <- X1 
    } else { 
     if (nrow(merge(X1, v$selectedData)) > 0) { 
     ind <- anyDuplicated(rbind(v$selectedData, X1), fromLast=TRUE) 
     v$selectedData <- v$selectedData[-ind,] 
     } else { 
     v$selectedData <- rbind(v$selectedData, X1) 
     } 
    } 
    }) 

これは私がグラフ上にプロット点を選択して、私が望んだとして、それらを覚えておくことができました。

関連する問題