Re: [R] related to my previous sapply question]

From: Marc Schwartz <MSchwartz_at_mn.rr.com>
Date: Tue 27 Jun 2006 - 12:44:13 EST

On Mon, 2006-06-26 at 20:46 -0500, markleeds@verizon.net wrote:
> in my previous post in which i asked about creating sequences
> from two vectors of numbers, all suggestions worked.
>
> tradevectors<-mapply(seq,from=tempa,to=tempb)
>
> or
>
> tradevectors<-sapply(1:length(tempa),function(x) seq(tempa[x],tempb[x])
>
> >both return a list with 3 components.
>
> the problem is that i want to take these 3 sequences and
>
> use them as the indices of two other vectors, X and Y and mutiply them ( element by element )
>
>
> >so, i tried
> >
> >temp<-sapply(1:length(tradevectors),function(i)X[tradevectors[[i]]]*Y[tradevectors[[i]]]
>
>
> basically, the sequence output from the previous command are
> indices to two vectors that i want to multiply ( element
> by element ).
>
> but, the message i get is that i cannot coerce list object to double.
>
> i looked up the info on unlist, but that just
> makes long vector. i need 3 vectors.

How about something like this:

  tempa <- c(4, 6, 10)

  tempb <- c(11, 23, 39)

  tradevectors <- mapply(seq, from = tempa, to = tempb)

> tradevectors

[[1]]
[1] 4 5 6 7 8 9 10 11

[[2]]
 [1] 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

[[3]]
 [1] 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
[23] 32 33 34 35 36 37 38 39

  

  X <- seq(2, 80, 2)
  Y <- 1:40

> X

 [1] 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 [23] 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80

> Y

 [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 [23] 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

> lapply(tradevectors, function(x) X[x] * Y[x])
[[1]]
[1] 32 50 72 98 128 162 200 242

[[2]]
 [1]   72   98  128  162  200  242  288  338  392  450  512  578  648
[14]  722  800  882  968 1058

[[3]]
 [1]  200  242  288  338  392  450  512  578  648  722  800  882  968
[14] 1058 1152 1250 1352 1458 1568 1682 1800 1922 2048 2178 2312 2450 [27] 2592 2738 2888 3042

For example, the first value in [[1]] is 32, which is:

  X[4] * Y[4] # The '4' comes from tradevectors[[1]][1]

which is:

  8 * 4

The other list elements are similarly constructed. You can use lapply() when you want to apply functions to individual list elements (in this case vectors) as you traverse the list tree. See ?lapply

HTH, Marc Schwartz



R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html Received on Tue Jun 27 12:48:40 2006

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.1.8, at Tue 27 Jun 2006 - 16:12:29 EST.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.