для цикла в r -циклическом векторе

#r #for-loop

Вопрос:

Я пытаюсь пройтись по всем кольцам в моем df и запустить тест на опору для каждого из них.

 library(gss)  

Для работы только с одной переменной я могу использовать—

 infer::prop_test(gss,  college ~ sex,  order = c("female", "male"))  

Но теперь я хочу запустить это для каждой переменной в моем df следующим образом:

 cols <- gss %>% select(-sex) %>% names(.)  for (i in cols){  # print(i)  prop_test(gss,  i~sex) }  

Но этот цикл не распознает i;

 Error: The response variable `i` cannot be found in this dataframe.  

Есть какие-нибудь предложения, пожалуйста??

Ответ №1:

Нам нужно создать формулу. Либо используйте reformulate

 library(gss) library(infer)  out <- vector('list', length(cols)) names(out) <- cols for(i in cols) {  out[[i]] <- prop_test(gss, reformulate("sex", response = i)) }  

-выход

 > out $college # A tibble: 1 × 6  statistic chisq_df p_value alternative lower_ci upper_ci  <dbl> <dbl> <dbl> <chr> <dbl> <dbl> 1 0.0000204 1 0.996 two.sided -0.0917 0.101  $partyid # A tibble: 1 × 3  statistic chisq_df p_value  <dbl> <dbl> <dbl> 1 12.9 3 0.00484  $class # A tibble: 1 × 3  statistic chisq_df p_value  <dbl> <dbl> <dbl> 1 2.54 3 0.467  $finrela # A tibble: 1 × 3  statistic chisq_df p_value  <dbl> <dbl> <dbl> 1 9.11 5 0.105  

или paste

 for(i in cols) {  prop_test(gss, as.formula(paste0(i, " ~ sex"))) }  

данные

 library(dplyr) data(gss) cols <- gss %>%   select(where(is.factor), -sex, -income) %>%   names(.)  

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

1. большое спасибо! Я думаю, что это сработает, но только последний вывод показывает cols <- gss %>% select(где(является фактором)) %<- gss %>>% select(-пол) %<- gss %>>>% имена(.) для(i в cols) { out <- gss %>>> >

2. @NewBee с for циклом мы можем либо распечатать, либо, если нам нужно сохранить, создать NULL список длиной, равной длине cols, и выполнить назначение для каждого элемента выходного списка с каждым выводом prop_test. Обновил сообщение