我使用以下函数对数据集进行加权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中定义它,该函数就可以正常工作。但是我想要在全局范围内定义所有函数。我想它与输入有关,因为它们是反应性的?!谁能帮我吗?
为什么这在技术上不起作用?
答案 0 :(得分:0)
有必要将所有反应式表达式定义为代码服务器部分的一部分。全局范围只能包含静态元素,例如库调用,数据操作,这些操作一旦执行就将保持原样,即使输入发生更改。窗口小部件输入每次更改时,全局范围不会重新执行,只有服务器代码会更改。
由于您的数据过滤取决于输入条件,因此必须进入服务器内部才能工作。
要了解闪亮的反应性如何工作,我发现以下文章很有帮助
作为代码的一部分,每次运行该函数时,都会查询input $ groupa的值(如果它为假或不是),则此值查找是全局无法执行的操作,只能由服务器执行。