On Apr 5, 2012, at 7:01 AM, Michael Bach wrote:
Dear R users,
how do I e.g. square each second element of a vector with an even
number of elements? Or more generally to apply a function to every
'nth' element of a vector. I looked into the apply functions, but
found no hint.
For example:
v <- c(1, 2, 3, 4)
mysquare <- function (x) { return (x*x) }
w <- applyfun(v, mysquare, 2)
then w should be c(1, 4, 3, 16)
An alternate approach to the ifelse() solutions you have been offered
is to use identical indexing on both sides of an assignment function.
> v <- c(1, 2, 3, 4)
> w <-v
> w[seq(2, length(w), by =2)] <-w[seq(2, length(w), by =2)]^2
> w
[1] 1 4 3 16
If you still wanted to create a function that would square each
element "in place" you could do this with an indexing strategy:
v <- c(1, 2, 3, 4)
w <-v
mysqr <- function (x) { eval.parent(substitute(x <- x^2)) }
mysqr(w[seq(2, length(w), by =2)])
w
#[1] 1 4 3 16
(Credit: http://www.statisticsblog.com/2011/10/waiting-in-line-waiting-on-r/
and search on 'inc')
Thanks for your time,
Michael Bach
______________________________________________
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.
David Winsemius, MD
West Hartford, CT
______________________________________________
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.