在R Shiny中,根据用户输入更新对象

时间:2019-08-15 02:11:14

标签: r shiny reactive

我希望在我的应用程序中始终显示我的图表(g)的图。我想将g的“默认”值硬编码到应用程序中,并且用户可以通过UI更新g。我正在使用{{igraph}}库及其功能,例如make_empty_graphadd_vertices

我相信目前我的主要问题是我对g进行了硬编码,但是g的响应版本实际上是g()。我确信这个问题以前已经解决了很多次,但是我在Shiny演示版中看不到做到这一点的例子。

这是server()里面的东西:

g <- make_empty_graph(directed = TRUE) %>%
    add_vertices(nv = 1, depth = 0L, x = 0, y = 0, cur = TRUE)

g <- eventReactive(
    eventExpr = 'investigate',
    valueExpr = {
        add_children(g = g, vidx = input$vidx)
    }
)

output$the_plot <- renderPlot(
    expr = {    
       plot_graph(g())
    }
)

add_children()plot_graph()在全局名称空间中定义。如果有帮助,我很乐意分享更多代码(或整个应用程序)。

根据SO的输入,有效版本为:

g <- reactiveVal(
    make_empty_graph(directed = TRUE) %>%
        add_vertices(nv = 1, depth = 0L, x = 0, y = 0, cur = TRUE)
)    

observeEvent(
    eventExpr = input$investigate,
    handlerExpr = g(add_children(g = g(), vidx = input$vidx)),
    ignoreInit = TRUE
)

output$the_plot <- renderPlot(plot_graph(g()))

1 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,请使用x => x*2x => { return x*2; }reactiveValues结合使用。下面的应用将从observeEvent中的初始值5开始,但稍后将取决于ignoreInit = TRUE。这样,您总是在输出中引用一个无功值。

output$test