我正在尝试在 <div id="radioGroup">
<h3>Select by Amount: </h3>
<input type="radio" name="dialinfo" value="mostdialled"> <label for="mostdialled">Most Dialled Digits</label><br>
<input type="radio" name="dialinfo" value="highestcost"> <label for="highestcost">Highest Costing Calls</label>
<br>
<h3>Select by Location: </h3>
<input type="radio" name="callLocation"> <label for="callLocation">Inside the UK</label><br>
<input type="radio" name="callLocation"> <label for="callLocation">International</label>
<h3>Select by Cost: </h3>
<input type="radio" name="costradio"> <label for="costradio">Less than £1</label><br>
<input type="radio" name="costradio"> <label for="costradio">More than £1</label><br>
<input type="radio" name="costradio"> <label for="costradio">More than £5</label><br>
<input type="radio" name="costradio"> <label for="costradio">More than £10</label>
<h3>Select Duration: </h3>
<input type="radio" name="callDuration"> <label for="callDuration">Less than 60s</label><br>
<input type="radio" name="callDuration"> <label for="callDuration">More than 60s</label><br>
<input type="radio" name="callDuration"> <label for="callDuration">More than 1hr</label><br>
<input type="radio" name="callDuration"> <label for="callDuration">More than 5hrs</label>
</div>
我有
observeEvent()
和calculate_value()
create_my_plot()
myreactive()
。根据输入值选择文件。a
使用a
处理并传递给calculate_value()
它是这样的:
create_my_plot()
每当我点击动作按钮时,此事件都会激活并绘制新的绘图。但是,每当myreactive<-reactive({input$myinput})
observeEvent(input$clicks,
{
filename<-paste(myreactive(),".csv")
a<-read.csv(filename)
x<-calculate_value(a,b=myreactive())
output$myplot<-renderPlot(
create_my_plot(x,myreactive())
})
更改时,此图都会重新绘制。这很好。但是重新绘制的情节有一个问题:它仍然使用&#34; old&#34; &#34; x&#34;
每当myreactive()发生变化时,我都需要重新计算函数calculate_value()。它没有发生
我已经尝试了usinig
myreactive()
但是没有任何反应。即根本不执行该函数,并将x保留为null。 对我来说这是不可接受的,因为&#34; myreactive()&#34;正在改变数据集和绘图的描述,如果绘图没有相应地重新绘制,则完全错误。
如果myreactive()发生变化,完全删除情节就足够了,但实际上我想知道发生了什么以及为什么每次x<-reactive({ calculate_value(a,b=myreactive()) })
重新进行计算calculate_value()
{1}}可以做到。
答案 0 :(得分:1)
就我而言,当我使用observerEvent()
时,当某个值发生变化时,此方法中引入的所有内容都会发生变化。 Shiny是一个利用反应式编程的框架。在任何情况下,您都可以使用reactive()
来重用代码并获得干净的代码。如果您使用此变量并且值更改,则值将在所有位置更改。
问题的解决方案,可以在observe()
内使用observerEvent()
。实际上,每次实习代码的值发生变化时,observe()
都会执行其中的所有内容。
您可以看到此示例,并尝试使用它:
testReactive<-reactive({as.numeric(input$numberTest)})
observeEvent(input$bTest,{
observe({
x<-10+testReactive()
output$testing<-renderText(print(x))
}) #Closed observe
}) #Closed observeEvent