[R-lang] Re: swapping values without temporary storage

Michael Shvartsman mshvarts@umich.edu
Tue Apr 15 11:45:02 PDT 2014


Are you looking for a clever one-liner for clarity or are you looking to
avoid copying for memory and performance reasons? In the former case,
swap() in Kmisc provides what you want.

library(Kmisc)

x <- 1:10
x
x <- swap(x, c(2,3), c(3,2))
x
x <- swap(x, c(2,10), c(10,2))
x

In the latter case, your best bet is to compile R with
--enable-memory-profiling (OSX R does this by default) and use tracemem()
and Rprofmem().

    Hope this helps!

        Mike.


On Tue, Apr 15, 2014 at 2:05 PM, João Veríssimo <jl.verissimo@gmail.com>wrote:

> Perhaps rev() can help?
>
> Maybe something like:
>
> x <- c("a", "b", "c")
> c(x[1], rev(x[2:3]))
>
> João
> On Tue, 2014-04-15 at 17:52 +0000, Hofmeister, Philip wrote:
> > this is probably more appropriate for a general R listserv, but i'm more
> likely to get an answer i can decipher here. apologies also for what is
> likely a simple fix, but i can't seem to find the right term or syntax to
> get this to work without writing ugly code.
> >
> > i want to swap values in a vector, e.g.
> >
> > x <- c(1, 2, 3)
> > [1] 1 2 3
> >
> > and get back
> >
> > 1 3 2
> >
> > i can do this by saving the 2nd or 3rd element of the vector elsewhere,
> replacing one of the vector elements (x[3] <- x[2]), and then restoring the
> stored value, but that seems wasteful. surely there is a function like
> swap() or  std::swap(a, b), but i can't seem to find anything. anyone have
> any ideas?
> >
> > ph
> >
> >
> >
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.ucsd.edu/pipermail/ling-r-lang-l/attachments/20140415/99f0f058/attachment-0001.html 


More information about the ling-r-lang-L mailing list