2015-03-04 1 views
1

C'est ce que j'ai (une liste):une liste d'entiers en deux colonnes en R

>head(indexes) 
[[1]] 
numeric(0) 

[[2]] 
[1] 12 

[[3]] 
[1] 13 

[[4]] 
[1] 2 3 

[[5]] 
[1] 25 

[[6]] 
[1] 26 

> all(vapply(indexes, is.numeric, TRUE)) # (note that..) 
[1] TRUE 

.. et ce que je veux (même information pour moi):

>head(res,6) 
    [,1] [,2] 
[1,] 2 12 
[2,] 3 13 
[3,] 4 2 
[4,] 4 3 
[5,] 5 25 
[6,] 6 36 

Existe-t-il une façon intelligente de faire cela?

J'ai essayé un truc de nommer la liste: (! Un genre enfant putain)

names(indexes) <- 1:lenght(indexes) 
res <- c(indexes, recursive=TRUE) 
res <- cbind(as.integer(names(res)), res) 

Mais R brise tout vers le bas en renommant les lignes identiques de façon ambiguë:

>head(res) 
     res 
2 2 2 
3 3 3 
41 41 2 
42 42 3 
5 5 5 
6 6 6 

# ... (think about what happens around lines 3675.. 41158..) 

.. si c'était la façon intelligente, comment puis-je empêcher le changement de nom?

+1

'cbind (représentant (seq (IDX), sapply (IDX, longueur)), unlist (idx)) '(mais pas intelligent) – user20650

+0

@ user20650 Pourquoi pas intelligent?^^ –

Répondre

0

Wops! D'accord, clouant:

res <- cbind(
    rep(1:length(indexes), vapply(indexes,length,1)), 
    c(indexes,recursive=TRUE) 
) 

.. me dire si quelqu'un a trouvé une meilleure façon, alors :)