#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))
}