[R] Elementary sapply question

Sundar Dorai-Raj sundar.dorai-raj at PDF.COM
Mon Jun 21 21:10:00 CEST 2004



Brian Desany wrote:

>  
> Looking in ?mapply, I executed the examples:
> 
> 
>>mapply(rep, 1:4, 4:1)
> 
> [[1]]
> [1] 1 1 1 1
> 
> [[2]]
> [1] 2 2 2
> 
> [[3]]
> [1] 3 3
> 
> [[4]]
> [1] 4
> 
> 
>>mapply(rep, times=1:4, x=4:1)
> 
> [[1]]
> [1] 4
> 
> [[2]]
> [1] 3 3
> 
> [[3]]
> [1] 2 2 2
> 
> [[4]]
> [1] 1 1 1 1
> 
> 
> I can guess that because these are 2 examples, it is no surprise that the
> results are different. Why is this? If ?mapply is giving me a clue, I'm not
> seeing it.
> 
> Thanks,
> -Brian.
> 

The clue you seek is in ?rep which has "x" then "times" as its 
arguments. The first example is equivalent to mapply(rep, x = 1:4, times 
= 4:1) whereas the second example you were more explicit about the 
arguments order.

--sundar


> 
> -----Original Message-----
> From: r-help-bounces at stat.math.ethz.ch
> [mailto:r-help-bounces at stat.math.ethz.ch] On Behalf Of Liaw, Andy
> Sent: Monday, June 21, 2004 11:50 AM
> To: 'Ajay Shah'; r-help
> Subject: RE: [R] Elementary sapply question
> 
> At least two ways:
> 
> 1. Use extra argument in the function being sapply()'ed; e.g.,
> 
> 
>>f <- function(x, y) x*x + y*y
>>x <- 3:5
>>sapply(x, f, 3)
> 
> [1] 18 25 34
> 
> [See the "..." argument in ?sapply.]
> 
> 2. More generally, if both x and y are vectors (of the same length), then
> you can use mapply(); e.g.,
> 
> 
>>x <- 1:3
>>y <- 3:5
>>pyth <- function(x, y) x*x + y*y
>>mapply(pyth, x, y)
> 
> [1] 10 20 34
> 
> HTH,
> Andy
> 
> 
>>From: Ajay Shah
>>
>>I am discovering sapply! :-) Could you please help me with a very
>>elementary question?
>>
>>Here is what I know. The following two programs generate the 
>>same answer.
>>
>>--------------------------------+-----------------------------
>>-----------
>>       Loops version            |          sapply version
>>--------------------------------+-----------------------------
>>-----------
>>                                |
>>f <- function(x) {              |       f <- function(x) { 
>>  return(x*x)                   |         return(x*x)      
>>}                               |       }                  
>>values = c(2,4,8)               |       values = c(2,4,8)  
>>answers=numeric(3)              |       answers = sapply(values, f)
>>for (i in 1:3) {                |       
>>  answers[i] = f(values[i])     |
>>}                               |
>>
>>and this is cool!
>>
>>My problem is this. Suppose I have:
>>     pythagorean <- function(x, y) {
>>       return(x*x + y*y)
>>     }
>>
>>then how do I utilise sapply to replace
>>     fixed.x = 3
>>     y.values = c(3,4,5)
>>     answers=numeric(3)
>>     for (i in 1:3) {
>>         answers[i] = pythagorean(fixed.x, y.values[i])
>>     }
>>
>>?
>>
>>I have read the sapply docs, and don't know how to tell him that the
>>list values that he'll iterate over "fit in" as y.values[i].
>>
>>-- 
>>Ajay Shah                                                   Consultant
>>ajayshah at mayin.org                      Department of Economic Affairs
>>http://www.mayin.org/ajayshah           Ministry of Finance, New Delhi
>>
>>______________________________________________
>>R-help at stat.math.ethz.ch mailing list
>>https://www.stat.math.ethz.ch/mailman/listinfo/r-help
>>PLEASE do read the posting guide! 
>>http://www.R-project.org/posting-guide.html
>>
>>
> 
> 
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://www.stat.math.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide!
> http://www.R-project.org/posting-guide.html
> 
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://www.stat.math.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html




More information about the R-help mailing list