Выполнение R t.test во вложенных циклах - PullRequest
0 голосов
/ 11 марта 2019

Я новичок в R Studio. Для класса я вытащил набор данных о выборах в рамках американской переписи 2016 года и хочу провести серию T-тестов над набором данных. Некоторая специфика в наборе данных. Во-первых, данные кодируются - от 1 до 4 - представляют состояние гражданства. Я хочу посмотреть, влияют ли различные факторы на вероятность голосования (1 = Да или 2 = Нет).

Вот код:

factor <- c("Age", "Fathers_country_of_birth", "Mothers_country_of_birth","Highest_level_of_School_completed", "Country_of_birth")
citizen <- c("NATIVE, BORN IN THE UNITED STATES", "NATIVE, BORN IN PUERTO RICO OR OTHER U.S. ISLAND AREAS", "NATIVE, BORN ABROAD OF AMERICAN PARENT OR PARENTS", "FOREIGN BORN, U.S. CITIZEN BY NATURALIZATION")

for (f in factor) {
  print(f)
for (i in 1:4){
  print(paste("Citizenship is", citizen[i] ))
  query <- paste("select * from result2 where Citizenship = ",i)

 sample <- sqldf(query) 
  print(
  (t.test(f ~ Vote_in_Election, data=sample, var.equal = FALSE) ) ) 

} }

И выдает ошибку «переменной длины»

> [1] "Age" [1] "Citizenship is NATIVE, BORN IN THE UNITED STATES"  Show
> Traceback Error in model.frame.default(formula = f ~ Vote_in_Election,
> data = sample) : variable lengths differ (found for
> 'Vote_in_Election')

Если я извлекаю внешний цикл, я могу нормально его запускать, я, конечно, должен вводить значения в 'factor' по одному.

Под управлением R Studio версии 1.1.463, R - 3.5.2 в Windows 10.

Поскольку при итерации по i будут разные строки данных, я попытался установить paired = FALSE, и он все равно кричал на меня.

Я просмотрел SO, но не нашел решения. Чего мне не хватает?

1 Ответ

0 голосов
/ 11 марта 2019

Для динамического построения формулы вам нужно привести строковую версию формулы внутри as.formula:

t.test(as.formula(paste(f, "~ Vote_in_Election")), data=sample, var.equal = FALSE) 

Или использовать reformulate:

t.test(reformulate("Vote_in_Election", response=f), data=sample, var.equal = FALSE)
...