R T. проверка на наличие нескольких пороговых значений в функции отображения

#r

#r

Вопрос:

Я хочу выполнить t.тесты для нескольких пороговых значений и нескольких фреймов данных. Вот мой пример кода с пороговыми значениями 1, 2 и 3:

 df1 <- tibble(
var1A= rnorm(1:10)  1,
var1B= rnorm(1:10)  1,
var2A= rnorm(1:10)  2,
var2B= rnorm(1:10)  2,
var3A= rnorm(1:10)  3,
var3B= rnorm(1:10)  3)


df2 <- tibble(
var1A= rnorm(1:10)  1,
var1B= rnorm(1:10)  1,
var2A= rnorm(1:10)  2,
var2B= rnorm(1:10)  2,
var3A= rnorm(1:10)  3,
var3B= rnorm(1:10)  3)


df3 <- tibble(
var1A= rnorm(1:10)  1,
var1B= rnorm(1:10)  1,
var2A= rnorm(1:10)  2,
var2B= rnorm(1:10)  2,
var3A= rnorm(1:10)  3,
var3B= rnorm(1:10)  3)
  

Нет, я хочу запустить t.тест для переменных A и B для всех фреймов данных.

Этот код работает для первого порогового значения 1:

 list_dfs = c('df1','df2','df3')

map(mget(list_dfs),
function(x)
{t.test(x%>%pull(paste0("var",1,"A")), x%>%pull(paste0("var",1,"B")))}
)%>%
map_df(tidy)%>% add_column(.before = 'estimate',df = list_dfs)
  

Теперь я получаю желаемый результат: (таблица t.тестов для всех фреймов данных для порога 1)

 # A tibble: 3 x 11
df    estimate estimate1 estimate2 statistic p.value parameter conf.low conf.high method   alternative
<chr>    <dbl>     <dbl>     <dbl>     <dbl>   <dbl>     <dbl>    <dbl>     <dbl> <chr>    <chr>      
1 df1     -0.371     0.534     0.906    -0.874   0.395      16.0   -1.27      0.529 Welch T~ two.sided  
2 df2      0.500     1.49      0.985     1.01    0.326      17.7   -0.542     1.54  Welch T~ two.sided  
3 df3     -0.363     1.13      1.49     -0.952   0.354      18.0   -1.16      0.438 Welch T~ two.sided  
  

Но теперь я хочу автоматически запустить t.test для всех 3 пороговых значений.
Как я могу поместить пороговые значения в map_function, чтобы я получил 3 новые таблицы t.tests? (1 таблица для каждого порога)

Комментарии:

1. Как вы устанавливаете пороговое значение?

2. Это пример кода. В моих реальных данных пороговыми значениями являются 1, 2 и 3 стандартных отклонения.

Ответ №1:

вы могли бы перебирать пороговые значения внутри функции (на первой карте) и выполнять свою очистку также внутри нее, затем вы могли бы добавить другие переменные для указания df и threshold

как насчет чего-то подобного:

 list_dfs = c('df1','df2','df3')
thresholds = c(1, 2, 3)

map(list_dfs,
    function(df_name){
      x <- get(df_name)
      lapply(threshold, function(i){
        t.test(x %>%
                 pull(paste0("var",i,"A")), 
               x %>% 
                 pull(paste0("var",i,"B")))
      }) %>% 
        map_df(broom::tidy) %>% 
        add_column(.before = 'estimate',
                   df = df_name, 
                   threshold = thresholds)
    }) %>% 
  do.call(rbind, .)