Присвойте входные значения блестящего виджета матрице / фрейму данных - PullRequest
0 голосов
/ 23 октября 2018

Простой вопрос, я думаю.У меня блестящее приложение с виджетами ввода ползунка диапазона min-max.Я передаю значения виджета индивидуально в функцию, которая применяет алгоритм.

Я хотел бы сначала присвоить минимальные и максимальные значения матрице с двумя столбцами или кадру данных.А затем передать этот объект в функцию.

Может кто-нибудь предложить блестящий синтаксис для этого?Спасибо.SteveM

Редактировать: функция запускается с кнопки действия, а не с изменения значения ползунка.

1 Ответ

0 голосов
/ 23 октября 2018

Мы должны использовать реактивную среду только при первоначальном доступе к этим переменным и вызове функций, которые используют указанные переменные.В этом случае мы назначаем 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)

enter image description here

Использование реактивного 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())
  })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...