Для цикла и баз данных в R

#r #database #for-loop

#r #База данных #для цикла

Вопрос:

Мне нужно загрузить n-е количество баз данных для дальнейшей обработки в Rstudio. Возможно ли это сделать с помощью цикла for?

Если делать все руками (без цикла), это выглядит так:

 d1 = read.spss("r28iall_32.sav", to.data.frame=TRUE, use.value.labels=FALSE)
d2 = read.spss("r27iall_32.sav", to.data.frame=TRUE, use.value.labels=FALSE)
d3 = read.spss("r26iall_32.sav", to.data.frame=TRUE, use.value.labels=FALSE)
  

Понимая, что изменяется только одна цифра, я создаю следующий вектор:

 c2 = c(9:28)
c2[1]='09'
c3 = c(rep("r",20))
c4 = c(rep("iall_32.sav",20))
g = rev(sort(paste0(c3,c2,c4)))
  

Который принимает значения:

 [1] "r28iall_32.sav" "r27iall_32.sav" "r26iall_32.sav" "r25iall_32.sav" "r24iall_32.sav" "r23iall_32.sav" "r22iall_32.sav" "r21iall_32.sav"
 [9] "r20iall_32.sav" "r19iall_32.sav" "r18iall_32.sav" "r17iall_32.sav" "r16iall_32.sav" "r15iall_32.sav" "r14iall_32.sav" "r13iall_32.sav"
[17] "r12iall_32.sav" "r11iall_32.sav" "r10iall_32.sav" "r09iall_32.sav"
  

Создайте цикл for:

 d = NULL
for (i in (1:20)) {
  d = read.spss(g[i], to.data.frame=TRUE, use.value.labels=FALSE)
}
  

и, естественно, он возвращает только последнюю 20-ю базу. Не могли бы вы рассказать мне, как сохранять эти базы данных в разделе данных каждый раз, чтобы получить d1, d2, d3 и т.д.?

Ответ №1:

Вы можете добавить наборы данных в виде элементов в список:

 d = list
for (i in (1:20)) {
  d[[i]] = read.spss(g[i], to.data.frame=TRUE, use.value.labels=FALSE)
}
  

Или присвоите каждой отдельной переменной (но я рекомендую первое):

 d = 1:20
for (i in (1:20)) {
  assign(d[i], read.spss(g[i], to.data.frame=TRUE, use.value.labels=FALSE))
}