#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. Обновил сообщение