将闪亮的窗口小部件输入值分配给矩阵/数据框

时间:2018-10-23 14:18:37

标签: r shiny

我想一个简单的问题。我有一个带有最小-最大范围滑块输入小部件的闪亮应用程序。我将小部件的值分别传递给应用算法的函数。

我想首先将最小-最大值分配给2列矩阵或数据帧。然后将该对象传递给函数。

有人可以建议这样做的闪亮语法吗?谢谢。史蒂夫·M

编辑:该功能是从操作按钮启动的,而不是从滑块值的更改启动的。

1 个答案:

答案 0 :(得分:0)

我们只需要在最初访问这些变量并调用使用所述变量的函数时使用反应性环境。在这种情况下,我们将最小值和最大值指定为反应变量,因为它们会随时间变化。我们用来创建反应堆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())
})

使用按钮ID为“ 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())
  })