list 형을 data.frame 형으로 바꾸기 위한 상황에서의 질의


R에서 list 객체안에 담겨있는 복수개의 member 원소를 binding 하여 데이터프레임형으로 변환하려고 할 때 궁금증이 생겨 질문글을 작성합니다.

A) 질문에 사용되는 예시데이터

예를 들어 아래와 같은 list 형 객체 cul 이 있다고 가정해 보겠습니다.

li <- list()
for(i in 1:10) li[[i]] <- mtcars[i,]
li
## [[1]]
##           mpg cyl disp  hp drat   wt  qsec vs am gear carb
## Mazda RX4  21   6  160 110  3.9 2.62 16.46  0  1    4    4
## 
## [[2]]
##               mpg cyl disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4 Wag  21   6  160 110  3.9 2.875 17.02  0  1    4    4
## 
## [[3]]
##             mpg cyl disp hp drat   wt  qsec vs am gear carb
## Datsun 710 22.8   4  108 93 3.85 2.32 18.61  1  1    4    1
## 
## [[4]]
##                 mpg cyl disp  hp drat    wt  qsec vs am gear carb
## Hornet 4 Drive 21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
## 
## [[5]]
##                    mpg cyl disp  hp drat   wt  qsec vs am gear carb
## Hornet Sportabout 18.7   8  360 175 3.15 3.44 17.02  0  0    3    2
## 
## [[6]]
##          mpg cyl disp  hp drat   wt  qsec vs am gear carb
## Valiant 18.1   6  225 105 2.76 3.46 20.22  1  0    3    1
## 
## [[7]]
##             mpg cyl disp  hp drat   wt  qsec vs am gear carb
## Duster 360 14.3   8  360 245 3.21 3.57 15.84  0  0    3    4
## 
## [[8]]
##            mpg cyl  disp hp drat   wt qsec vs am gear carb
## Merc 240D 24.4   4 146.7 62 3.69 3.19   20  1  0    4    2
## 
## [[9]]
##           mpg cyl  disp hp drat   wt qsec vs am gear carb
## Merc 230 22.8   4 140.8 95 3.92 3.15 22.9  1  0    4    2
## 
## [[10]]
##           mpg cyl  disp  hp drat   wt qsec vs am gear carb
## Merc 280 19.2   6 167.6 123 3.92 3.44 18.3  1  0    4    4

저는 이러한 li 객체를 이용해 mtcars[1:10, ] 과 같은 형태로 바꾸고자 합니다.

mtcars[1:10, ]
##                    mpg cyl  disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4         21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag     21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710        22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive    21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout 18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
## Valiant           18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
## Duster 360        14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
## Merc 240D         24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
## Merc 230          22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
## Merc 280          19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4

물론 지금은 mtcars 라는 예시가 있기 때문에 mtcars[1:10, ] 를 그 결과로 사용하면 되지만 저에게 주어진 것은 오직 list 형 li 이라고 할 때

## [[1]]
##           mpg cyl disp  hp drat   wt  qsec vs am gear carb
## Mazda RX4  21   6  160 110  3.9 2.62 16.46  0  1    4    4
## 
## [[2]]
##               mpg cyl disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4 Wag  21   6  160 110  3.9 2.875 17.02  0  1    4    4
## 
## [[3]]
##             mpg cyl disp hp drat   wt  qsec vs am gear carb
## Datsun 710 22.8   4  108 93 3.85 2.32 18.61  1  1    4    1
## 
## [[4]]
##                 mpg cyl disp  hp drat    wt  qsec vs am gear carb
## Hornet 4 Drive 21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
## 
## [[5]]
##                    mpg cyl disp  hp drat   wt  qsec vs am gear carb
## Hornet Sportabout 18.7   8  360 175 3.15 3.44 17.02  0  0    3    2
## 
## [[6]]
##          mpg cyl disp  hp drat   wt  qsec vs am gear carb
## Valiant 18.1   6  225 105 2.76 3.46 20.22  1  0    3    1
## 
## [[7]]
##             mpg cyl disp  hp drat   wt  qsec vs am gear carb
## Duster 360 14.3   8  360 245 3.21 3.57 15.84  0  0    3    4
## 
## [[8]]
##            mpg cyl  disp hp drat   wt qsec vs am gear carb
## Merc 240D 24.4   4 146.7 62 3.69 3.19   20  1  0    4    2
## 
## [[9]]
##           mpg cyl  disp hp drat   wt qsec vs am gear carb
## Merc 230 22.8   4 140.8 95 3.92 3.15 22.9  1  0    4    2
## 
## [[10]]
##           mpg cyl  disp  hp drat   wt qsec vs am gear carb
## Merc 280 19.2   6 167.6 123 3.92 3.44 18.3  1  0    4    4

##                    mpg cyl  disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4         21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag     21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710        22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive    21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout 18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
## Valiant           18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
## Duster 360        14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
## Merc 240D         24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
## Merc 230          22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
## Merc 280          19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4

와 같은 data.frame 형으로 스위칭하기 위해 어떤식으로 코딩하는지를 알고 싶습니다.

B) 질문의 목적

제가 했던 시도들은 아래 B-1절에 자세히 서술했지만 expression 을 소위 노가다(?)로 작성한 컨셉에 불가한데,
이러한 방법을 피하는것이 목표입니다.
이외에 다양한 시도를 해보았지만 근본적인 해결방법으로 볼 수 없다고 판단하여 질문을 작성합니다.
노하우 혹은 창의적인 조언을 받을 수 있다면 감사하겠습니다!

B-1) 시도들

# 시도1 : 이런코딩은 절대 하고싶지 않아요 ㅠㅠ 😱
rbind(li[[1]], li[[2]], li[[3]], li[[4]], li[[5]], li[[6]], li[[7]], li[[8]], li[[9]], li[[10]])
##                    mpg cyl  disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4         21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag     21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710        22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive    21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout 18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
## Valiant           18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
## Duster 360        14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
## Merc 240D         24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
## Merc 230          22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
## Merc 280          19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
# 시도2 : 굳이 이렇게 반복문을 짜야할까요 ㅠㅠ 😨
cul <- li[[1]]
for(i in 2:10){
    add <- li[[i]]
    cul <- rbind(cul, add)
}
cul
##                    mpg cyl  disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4         21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag     21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710        22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive    21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout 18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
## Valiant           18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
## Duster 360        14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
## Merc 240D         24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
## Merc 230          22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
## Merc 280          19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
# 시도3 : `write.csv()` 함수의 append 인자를 이용해 외부로 빼내는 방법을 모색했지만 실패했어요 ㅠㅠ 😰
for(i in 1:10){
    write.csv(li[[i]], "result.txt", append = T) # append ignored
}

lovetoken (Email : lt.lovetoken@gmail.com)

2016-08-29