R Shiny嵌套输入函数使用不同的数据帧

时间:2018-02-19 19:05:00

标签: r shiny widget

我在nXm矩阵中有3个度量,代表n = 500和m = 31(表示1个月内的相同度量,包括:(“执行功能”,“工作记忆”,“抑郁”)三个不同的“试验” (“Trial1”,“Trial2”,“Trial3”)。我有6个不同的矩阵代表这些数据源的组合(即“Trial1_WM”)。我也有一个相应的变量及相应的日期。

我正在尝试构建一个R Shiny应用程序,我可以在其中选择这些数据集的子集以在直方图中绘制它们(即所有试验中的WM和日期范围,WM用于试验1等)。我已经构建了小部件并构建了应用程序来绘制所有数据的图形。但我无法弄清楚如何使用多个小部件来按我的意愿分割数据。下面是一些工作代码,其中包含我想要构建的所有小部件,这些小部件目前仅适用于带有滑块来存储数据的agregrate数据(即所有WM):

库(有光泽)

读入数据

In [64]: arr.prod(axis=0)
Out[64]: array([ 1,  8, 27])

1 个答案:

答案 0 :(得分:1)

一种选择是在服务器中使用被动()功能。它使您能够对矩阵 x 进行一些操作,这将是 renderPlot()中使用的矩阵。 例如,如果Study ='All'或者Study ='Trial1',则简单的if语句将创建不同的矩阵。

server <- function(input, output) {    

  filterData <- reactive({    
     if(input$Study == 'All')
        x <- switch(input$Test, 
               "Executive Functioning" = cbind(Trial1_EF, Trial2_EF, Trial3_EF),
               "Working Memory"        = cbind(Trial1_WM, Trial2_EF, Trial3_WM), 
               "Depression"            = cbind(Trial1_DP, Trial2_EF, Trial3_DP))

    if(input$Study == 'Trial1')
        x <- switch(input$Test, 
               "Executive Functioning" = cbind(Trial1_EF),
               "Working Memory"        = cbind(Trial1_WM), 
               "Depression"            = cbind(Trial1_DP))

    return(x)
  })    

  output$distPlot <- renderPlot({     

    x <- filterData()        
    slider1 <- seq(floor(min(x)), ceiling(max(x)), length.out = input$slider1 + 1)

    [...]

    hist(x, breaks = slider1, col = color, main = legend)
  })
}

您可以根据需要创建任意数量的被动()