2012-04-21 3 views
0

R에서 요소 수가 다른 객체로 구성된 목록이 있습니다.R 목록에서 같지 않은 크기의 객체에 대한 반복 요소

lmax <- max(unlist(lapply(l,length))) 

또한 객체가 가장 긴하지를 식별하는 방법 :

notlongest <- unlist(lapply(l,length)) != max(unlist(lapply(l,length))) 

예를 들어,

l <- list(a=c(1,2), b=3, c=4) 

나는 모든 개체의 최대 길이를 찾는 방법을 알아 낸 지금해야 할 일 : 목록에있는 notlongest의 개체의 경우 해당 요소의 수를 lmax 번 반복하고 새 목록을 얻으십시오. 그게 내가이 뭔가 보이는 새로운 목록을 얻을 수 있도록 두 번 자신의 요소를 반복, 객체 B와 C를 들면 :

newl <- list(a=c(1,2), b=c(3,3), c=c(4,4)) 

내가 lapply 기능을 쉽게 응답이 확신을하지만 그럴 수 없어 그것을 알아 내라. 이 질문이 전에 부탁 된 경우 사과드립니다. 고맙습니다! 이제하지만 구조에서 직접 작동 할 수

dat <- do.call('data.frame', l) 

:

+0

일부 하찮은 일에 속 태우고 대신 사용할 수 있습니다, 당신은 당신의'올라가지을 단순화 할 수 있습니다 (lapply())''sapply'를 사용하여 콤보. –

답변

3
lmax <- max(sapply(l,length)) 
ll <- lapply(l, function(x) c(x, rep(x, lmax-length(x))) ) 
ll 
$a 
[1] 1 2 

$b 
[1] 3 3 

$c 
[1] 4 4 

, lengths(l)sapply(l,length)

lmax <- max(lengths(l)) 
+0

굉장해, 고마워 !! – epidemics

+0

더 직접적인 접근 방식, 나는 그것에 대해 생각하기에는 너무 천박했습니다. +1 –

+0

작은 목록에 단 하나의 요소가없는 상황에서이 방법이 효과가 있습니까? –

2

가장 간단한 방법은 내가 동일한 길이의 목록리스트로 그룹 목록을 R의 재활용 규칙 및 data.frame을 사용하는 것입니다 생각할 수 있다는 것입니다 다시 별도의 목록을 만들려면 별도의 목록으로 떨어져 다시 휴식 sapply를 사용에서

sapply(dat, list)