我正在努力弄清楚如何让2 R Shiny小部件相互更新 . 例如,可以更新文本框小部件的滑块小部件,反之亦然,最终用户可以选择使用任一小部件 .
这个问题很相似,但没有答案,所以我给的是(希望)一个更简单的例子 . Retrieving reactive dependencies as inferred by shiny::reactive() . 如果在其他地方回答这个问题,我一直无法找到这样的答案 .
我想知道我是否可以移动slider1来移动slider2和slider2来移动slider1 . 现在我只能做第一部分(我可以移动slider1来移动slider2) . 如果我能做到这一点,我想我可以使widget 1成为一个滑块,widget 2是一个数字输入,具有相同的代码 .
下面的例子是从http://shiny.rstudio.com/gallery/update-input-demo.html修改过来的,它是我能做的最小例子 . 这也是我能找到的唯一一个接近我想要的应用程序,虽然我意识到可能需要一种非常不同的方法......
Server.R代码
shinyServer(
function(input, output, clientData, session) {
#### one way interaction between slider 1 and 2 ####
observe({![enter image description here][1]
c_label <- input$control_label
c_num <- input$control_num # <- input$inSlider
# Slider input =============================================
updateSliderInput(session, "inSlider",
label = paste("Slider2", c_label),
value = c_num)
updateSliderInput(session, "control_num",
label = paste("Slider1", c_label),
value = c_num)
})
})
Ui.r代码
shinyUI(fluidPage(
titlePanel("One Way Reactive Slider"),
fluidRow(
column(3,
wellPanel(
h4("Slider Inputs"),
sliderInput("control_num",
"This controls values:",
min = 1, max = 20, value = 15),
sliderInput("inSlider", "Slider input:",
min = 1, max = 20, value = 15)
))
)
))
2 回答
诀窍是创建一个动态UI . 通过这种方式,您可以更新其他UI元素中的更改的滑块绘图表达式,并使用不同的默认值重建滑块窗口小部件:
server.R
ui.R
如果将每个输入滑块包含在反应式观察中,则可以实现目标 . 这不仅适用于两个输入,也适用于多个输入 . 让我举个例子来解释一下:
类似地,对于第二个输入,您必须通过以下方式重复代码: