Запись функции R

#r #function

#r #функция

Вопрос:

Я пытаюсь написать функцию, которая вычисляет pairwise_t_test для заданной ковариации в моем фрейме данных.

 pairs <- function(df, covariate, group){
    pwc <- pairwise_t_test(data = df, formula = covariate ~ group, paired = FALSE )
    print(pwc)
}


pairs(df = df_test_TS, covariate = "is_donor", group = "w.contextual")
 

И я тоже пытался :

 pairs(df = df_test_TS, covariate = is_donor, group = w.contextual)
 

Но они возвращают:

Ошибка: не удается извлечь столбцы, которые не существуют. Столбец ✖ group не существует.

Или:

Ошибка: не удается извлечь столбцы, которые не существуют. Столбец ✖ covariate не существует.

Переменные в на самом деле являются именами столбцов во фрейме данных, поэтому я не понимаю ошибки.

Ответ №1:

ошибка возникает из-за того, что в df нет столбца group или covariate:

 as.character(covariate ~ group)
[1] "~"         "covariate" "group"  
 

таким образом, формула будет подталкивать pairwise_t_test к поиску ковариации и группы в data.frame

 pairs <- function(df, covariate, group){
    covariate <- substitute(covariate)
    group <- substitute(group)
    pairwise_t_test(data = df, formula = as.formula(paste0(covariate, "~", group)), paired = FALSE )
}

pairs(df,  len , supp)
# A tibble: 1 x 9
  .y.   group1 group2    n1    n2      p p.signif  p.adj p.adj.signif
* <chr> <chr>  <chr>  <int> <int>  <dbl> <chr>     <dbl> <chr>       
1 len   OJ     VC        30    30 0.0604 ns       0.0604 ns          

pairs(df,  "len" , "supp")
# A tibble: 1 x 9
  .y.   group1 group2    n1    n2      p p.signif  p.adj p.adj.signif
* <chr> <chr>  <chr>  <int> <int>  <dbl> <chr>     <dbl> <chr>       
1 len   OJ     VC        30    30 0.0604 ns       0.0604 ns   
 

данные

 data("ToothGrowth")
df <- ToothGrowth
 

Ответ №2:

Попробуйте использовать функцию as.formula следующим образом:

 pairs <- function(df, covariate, group){
    pwc <- pairwise_t_test(data = df,
                           formula = as.formula(paste0(covariate,"~",group)),
                           paired = FALSE )
    print(pwc)
}
pairs(df = df_test_TS, covariate = "is_donor", group = "w.contextual")