Do.call()
데이터는 리스트 구조에 담겨져 있다.
이 데이터를 어떤 함수로 전달하고 싶지만 그 함수는 리스트를 인자로 받을 수 없는 구조이다.
해결책
1. 리스트를 벡터로 변환한다.
2. do.call
함수로 리스트를 개별 인자들로 분해한 쓰려고 하는 함수에 적용 한다.
do.call(function, list)
예제 아래와 같이 중첩 리스트(nested list)일 경우에 데이터행렬로 변경하기가 골치아프게 된다.
> list <- list(col1 = list (1,2,3), col2 = list(3,4,5), col3 = list(6,7,8))
> list
$col1
$col1[[1]]
[1] 1
$col1[[2]]
[1] 2
$col1[[3]]
[1] 3
$col2
$col2[[1]]
[1] 3
$col2[[2]]
[1] 4
$col2[[3]]
[1] 5
$col3
$col3[[1]]
[1] 6
$col3[[2]]
[1] 7
$col3[[3]]
[1] 8
# cbind를 수행해도 원하는 않는 코드가 생성 된다.
> cbind(list)
list
col1 List,3
col2 List,3
col3 List,3
# data.frame()을 수행해도 이상한 결과이다.
> as.data.frame(list)
col1.1 col1.2 col1.3 col2.3 col2.4 col2.5 col3.6 col3.7 col3.8
1 1 2 3 3 4 5 6 7 8
> unlist(list)
col11 col12 col13 col21 col22 col23 col31 col32 col33
1 2 3 3 4 5 6 7 8
> cbind(unlist(list))
[,1]
col11 1
col12 2
col13 3
col21 3
col22 4
col23 5
col31 6
col32 7
col33 8
#비로써 적절히 행과 열이 나뉘어서 합쳐지는 것을 볼 수 있다.
> do.call(cbind,list)
col1 col2 col3
[1,] 1 3 6
[2,] 2 4 7
[3,] 3 5 8
'AI > R Basic' 카테고리의 다른 글
병렬화를 통한 연산 성능 향상 및 성능 측정 방법 (0) | 2016.03.06 |
---|---|
위도,경도를 주소로 변환 ggmap package를 이용한 (geocoding and revgeocode in R) (0) | 2016.03.03 |
날짜 시간 변환 (Date-Time Conversion Function in R) (0) | 2015.12.14 |
JSON in R using jsonlite (0) | 2015.12.12 |
통계처리 (기본) (0) | 2015.10.28 |