R-Shiny Определить функцию с входами от ui.R - PullRequest
0 голосов
/ 11 сентября 2018

Я использую следующую функцию для выполнения взвешенного 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 голосов
/ 11 сентября 2018

Необходимо определить все реактивные выражения как часть серверной части кода.Глобальная область действия может содержать только статические элементы, такие как библиотечные вызовы, манипулирование данными, которые когда-то выполняются, остаются без изменений, даже если ввод изменяется.Глобальная область не повторяется каждый раз при изменении ввода виджета, меняется только код сервера.

Поскольку фильтрация данных зависит от условий ввода, для работы она должна идти внутрь сервера.

Чтобы понять, как реактивность в блестящих работах, я нахожу следующие статьи весьма полезными

Какчасть вашего кода, каждый раз, когда функция запускается, ищется значение ввода $ groupa [если оно ложное или нет], этот поиск значения является чем-то, что глобальный не может сделать и может только выполнить сервер.

...