[R] sparse vectors

Benilton Carvalho bcarvalh at jhsph.edu
Tue Sep 8 15:52:00 CEST 2009


library(Matrix)
a = sparseMatrix(i=c(20, 30, 100000000), j=rep(1, 3), x=c(2.2, 3.3,  
4.4))
b = sparseMatrix(i=c(3, 30), j=rep(1, 2), x=c(0.1, 0.1), dims=dim(a))
theSum = a+b
summary(theSum)


hth,
b

On Sep 8, 2009, at 10:19 AM, Henrique Dallazuanna wrote:

> Try this:
>
> abMerge <- merge(a, b, by = 'index', all = TRUE)
> list(index = abMerge$index, val = rowSums(abMerge[,2:3], na.rm =  
> TRUE))
>
> On Tue, Sep 8, 2009 at 10:06 AM, Robin Hankin <rksh1 at cam.ac.uk> wrote:
>
>> Hi
>>
>> I deal with long vectors almost all of whose elements are zero.
>> Typically, the length will be ~5e7 with ~100 nonzero elements.
>>
>> I want to deal with these objects using a sort of sparse
>> vector.
>>
>> The problem is that I want to be able to 'add' two such
>> vectors.
>> Toy problem follows.  Suppose I have two such objects, 'a' and 'b':
>>
>>
>>
>>> a
>> $index
>> [1]    20   30 100000000
>>
>> $val
>> [1] 2.2 3.3 4.4
>>
>>
>>
>>> b
>> $index
>> [1]   3  30
>>
>> $val
>> [1] 0.1 0.1
>>
>>>
>>
>>
>> What I want is the "sum" of these:
>>
>>> AplusB
>> $index
>> [1]    3   20   30 100000000
>>
>> $val
>> [1]  0.1 2.2 3.4 4.4
>>
>>>
>>
>>
>> See how the value for index=30 (being common to both) is 3.4
>> (=3.3+0.1).   What's the best R idiom to achieve this?
>>
>>
>>
>> --
>> Robin K. S. Hankin
>> Uncertainty Analyst
>> University of Cambridge
>> 19 Silver Street
>> Cambridge CB3 9EP
>> 01223-764877
>>
>> ______________________________________________
>> R-help at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide
>> http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>>
>
>
>
> --
> Henrique Dallazuanna
> Curitiba-Paraná-Brasil
> 25° 25' 40" S 49° 16' 22" O
>
>        [[alternative HTML version deleted]]
>
> <ATT00001.txt>




More information about the R-help mailing list