Мы должны использовать реактивную среду только при первоначальном доступе к этим переменным и вызове функций, которые используют указанные переменные.В этом случае мы назначаем min и max как реактивные переменные, так как они изменяются со временем.Эти реактивные переменные, которые мы используем для создания реактивного DF, оставляют нам min()
, max()
и DF()
.Отсюда мы используем их при вызове функций, но не нужно указывать реактивность один раз в функции.Пример: если Test(min)
является функцией с одним передаваемым аргументом min
, а min () является реактивным переменным, мы можем вызвать функцию и передать реактивную переменную с помощью Test(min())
.Ниже приведены все приведенные примеры для вашего случая.
library(shiny)
#Basic UI Setup
ui <- shinyUI(
fluidPage(
sidebarPanel(
sliderInput("Slider", "Min/Max", 0, 10, c(2,8) )
),
mainPanel(
tableOutput("DF")
)
))
Полностью реактивный пример, вызванный изменением ползунка
server <- function(input, output, session) {
#You can access the inputs reactivity this way...
Slider<-reactive({input$Slider})
min<-reactive({Slider()[1]})
max<-reactive({Slider()[2]})
DF<-reactive({data.frame(min(),max())})
#This is how you would use the min/max values in a function
Test<-function(min,max){
Test<-min
Test2<-max
Fin<-data.frame(Test,Test2)
names(Fin)<-c("min","max")
return(Fin)
}
#renderTable is reactive, calling the Test function with min() and max()
output$DF<-renderTable({
Test(min(),max())
})
}
shinyApp(ui = ui, server = server)
Использование реактивного DF с двумя столбцами в функции
#Using the premade reactive DF in a function
More_Tests<-function(DF){
Df_Test<-DF
return(DF)
}
...
output$DF2<-renderTable({
More_Tests(DF())
})
Использованиекнопка с идентификатором «GO», недостатком этой опции является то, что созданные здесь значения могут использоваться только внутри среды observeEvent
.Если это не работает для вас, см. Последний пример.
observeEvent(input$Go,{
Slider<-input$Slider
min<-Slider[1]
max<-Slider[2]
DF<-data.frame(min,max)
Tests<-function(DF){
Df_Test<-DF
return(DF)
}
output$DF2<-renderTable({
Tests(DF)
})
})
Последний вариант - использовать eventReactive
для возврата DF в среду.Это отличается от observeEvent
тем, что мы можем получить доступ к значению за пределами среды наблюдения, но теперь значения реагируют.
server <- function(input, output, session) {
DF<-eventReactive(input$Go,{
Slider<-input$Slider
min<-Slider[1]
max<-Slider[2]
DF<-data.frame(min,max)
})
Tests<-function(DF){
Df_Test<-DF
return(DF)
}
output$DF2<-renderTable({
Tests(DF())
})