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@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@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]]


