2010-03-19 4 views
3

J'ai deux matrices creuses, m1 et m2:Dans R, lors de l'utilisation de lignes nommées, une colonne à matrice clairsemée peut-elle être ajoutée (concaténée) à une autre matrice clairsemée?

> m1 <- Matrix(data=0,nrow=2, ncol=1, sparse=TRUE, dimnames=list(c("b","d"),NULL)) 
> m2 <- Matrix(data=0,nrow=2, ncol=1, sparse=TRUE, dimnames=list(c("a","b"),NULL)) 
> m1["b",1]<- 4 
> m2["a",1]<- 5 
> m1 
2 x 1 sparse Matrix of class "dgCMatrix" 

b 4 
d . 
> m2 
2 x 1 sparse Matrix of class "dgCMatrix" 

a 5 
b . 
> 

et je veux les cbind() pour faire une matrice creuse comme:

[,1] [,2] 
a . 5 
b 4 . 
d . . 

cependant cbind() ignore les lignes nommées:

> cbind(m1[,1],m2[,1]) 
    [,1] [,2] 
b 4 5 
d 0 0 

est-il un moyen de le faire sans une boucle de force brute?

+3

Cela fonctionnerait simplement si vous correspondiez à des positions et des noms: m1 <- Matrice (données = 0, nrow = 4, ncol = 1, sparse = VRAI, dimnames = liste (c ("a", "b" , "c", "d"), NULL)) m2 <- Matrice (données = 0, nrow = 4, ncol = 1, vide = VRAI, dimnames = liste (c ("a", "b", " c "," d "), NULL)) m1 [" b ", 1] <- 4 m2 [" a ", 1] <- 5 cbind (m1 [, 1], m2 [, 1]) mais je comprends que ce n'est pas une réponse à votre question .. – momobo

+0

Merci, je pourrais retravailler mon code pour gérer ça. – ayman

Répondre

2

Vous devriez envoyer la question à Martin Maechler, l'auteur d'une grande partie du paquet Matrix. Il existe une fonction cBind, mais elle ne reconnaît pas pour le moment les noms de scène, seulement les dimensions, du moins autant que je puisse dire (même en augmentant l'argument deparse.level à 2).

Questions connexes