R-Shiny Define函数,带有ui.R

时间:2018-09-11 09:11:19

标签: r function shiny shiny-reactivity

我使用以下函数对数据集进行加权t检验。

 pvfct <- function(var, weights) {
     req(input$groupb)
     req(input$sex)
     req(input$age)
     req(input$education)
     if(is.null(input$groupa) == FALSE & is.null(input$groupb) == FALSE & is.null(input$sex) == FALSE & is.null(input$age) == FALSE & is.null(input$education) == FALSE) {

         data <- df()
         data1 <- data %>%
             select(var, group1, weightrake) %>%
             filter(group1 == 1)

         data2 <- data %>%
             select(var, group1, weightrake) %>%
             filter(group1 == 2)

         result <- wtd.t.test(data1[[var]], data2[[var]], data1[[weights]], data2[[weights]], samedata = FALSE)
         result <- as.numeric(result$coefficients[3])
         result <- round(result, 2)
         result
     }
     else {}
 }

result <- pvfct("Image_Vertrauen_ALLBRANDS_top2", "weightrake")

只要我在Server.R中定义它,该函数就可以正常工作。但是我想要在全局范围内定义所有函数。我想它与输入有关,因为它们是反应性的?!谁能帮我吗?

为什么这在技术上不起作用?

1 个答案:

答案 0 :(得分:0)

有必要将所有反应式表达式定义为代码服务器部分的一部分。全局范围只能包含静态元素,例如库调用,数据操作,这些操作一旦执行就将保持原样,即使输入发生更改。窗口小部件输入每次更改时,全局范围不会重新执行,只有服务器代码会更改。

由于您的数据过滤取决于输入条件,因此必须进入服务器内部才能工作。

要了解闪亮的反应性如何工作,我发现以下文章很有帮助

作为代码的一部分,每次运行该函数时,都会查询input $ groupa的值(如果它为假或不是),则此值查找是全局无法执行的操作,只能由服务器执行。