我正在尝试构建一个闪亮的应用程序,允许用户在绘图上的多个位置单击,然后单击按钮将这些坐标添加到绘图中。问题是我需要将这些坐标作为向量传递给外部C程序,因此我需要在闪亮的应用程序内部使这个列表(向量)可用。这是我无法做到的。
我在下面添加了一个玩具示例(呈现罚款),并且相当遗憾地尝试创建这样的列表。我希望这个玩具示例是生成一个x,y坐标列表,然后从该列表中取出x和y坐标,并将它们添加到从mtcars中取出的向量,在单击&#34时生成更新的图表;接受新的价值观"按钮,例如。
有什么建议吗? 谢谢,马特
library(shiny)
listo <- numeric()
ui <- basicPage(
plotOutput("plot1", click = "plot_click"),
verbatimTextOutput("info")
)
server <- function(input, output) {
listo2 <-numeric() #create list
obs <- observe({listo2 = append(listo2, input$plot_clickx)}) #adding clicks to list
output$plot1 <- renderPlot({
plot(mtcars$wt, mtcars$mpg)
})
output$info <- renderText({
paste0("x=", input$plot_click$x, "\ny=", input$plot_click$y)
})
}
shinyApp(ui, server)
答案 0 :(得分:2)
您正在寻找适合反应式编程的列表:
所以?reactiveValues
是你的朋友:
您可以使用以下代码
将点击点保存在“反应列表”
点击actionButton
守则:
library(shiny)
ui <- basicPage(
plotOutput("plot1", click = "plot_click"),
verbatimTextOutput("info"),
actionButton("updateplot", "Update Plot:")
)
server <- function(input, output) {
val <- reactiveValues(clickx = NULL, clicky = NULL)
observe({
input$plot_click
isolate({
val$clickx = c(val$clickx, input$plot_click$x)
val$clicky = c(val$clicky, input$plot_click$y)
})
}) #adding clicks to list
output$plot1 <- renderPlot({
plot(mtcars$wt, mtcars$mpg)
input$updateplot
isolate({
points(val$clickx, val$clicky)
})
})
output$info <- renderText({
paste0("x = ", val$clickx, ", y = ",val$clicky, "\n")
})
}
shinyApp(ui, server)