I'm afraid I disagree.  As a number of people have shown, it's certainly
possible to get the end result

> pH <- c(4.5,7,7.3,8.2,6.3)
> names(pH) <- c('area1','area2','mud','dam','middle')
> pH
 area1  area2    mud    dam middle
   4.5    7.0    7.3    8.2    6.3

using a single expression. But what makes this non-functional is that the
names() function operates on a reference to the pH object/entity/element. In
other words, the names() function has a side effect, which is not permitted
in strictly functional programming.

I don't know if R has threads. But imagine it did and that one ran

> names(pH) <- c('area1','area2','mud','dam','middle')

and

 > names(pH) <- c('areaA','areaB','dirt','blockage','center')

in simultaneous threads. Since they are both operating on the same pH
element, it is uncertain what the result would be. That's one of the things
that functional programming prevents.

*-- Russ *



On Sat, Mar 19, 2011 at 10:22 PM, <Bill.Venables@csiro.au> wrote:

> PS the form
>
> names(p) <- c(...)
>
> is still functional, of course.  It is just a bit of syntactic sugar for
> the clumsier
>
> p <- `names<-`(p, c(...))
>
> e.g.
> > pH <- `names<-`(pH, letters[1:5])
> > pH
>  a   b   c   d   e
> 4.5 7.0 7.3 8.2 6.3
> >
>
>
>
> -----Original Message-----
> From: Venables, Bill (CMIS, Dutton Park)
> Sent: Sunday, 20 March 2011 3:09 PM
> To: 'Gabor Grothendieck'; 'Russ.Abbott@gmail.com'
> Cc: 'r-help@r-project.org'
> Subject: RE: [R] R as a non-functional language
>
> The idiom I prefer is
>
> pH <- structure(c(4.5,7,7.3,8.2,6.3),
>                names = c('area1','area2','mud','dam','middle'))
>
> -----Original Message-----
> From: r-help-bounces@r-project.org [mailto:r-help-bounces@r-project.org]
> On Behalf Of Gabor Grothendieck
> Sent: Sunday, 20 March 2011 2:33 PM
> To: Russ.Abbott@gmail.com
> Cc: r-help@r-project.org
> Subject: Re: [R] R as a non-functional language
>
> On Sun, Mar 20, 2011 at 12:20 AM, Russ Abbott <russ.abbott@gmail.com>
> wrote:
> > I'm reading Torgo (2010) *Data Mining with
> > R*<http://www.liaad.up.pt/~ltorgo/DataMiningWithR/code.html>in
> > preparation for a class I'll be teaching next quarter.  Here's an
> > example
> > that is very non-functional.
> >
> >> pH <- c(4.5,7,7.3,8.2,6.3)
> >> names(pH) <- c('area1','area2','mud','dam','middle')
> >> pH
> >  area1  area2    mud    dam middle
> >   4.5    7.0    7.3    8.2    6.3
> >
> >
> > This sort of thing seems to be quite common in R.
>
> Try this:
>
> pH <- setNames(c(4.5,7,7.3,8.2,6.3),
> c('area1','area2','mud','dam','middle'))
>
>
>
>
> --
> Statistics & Software Consulting
> GKX Group, GKX Associates Inc.
> tel: 1-877-GKX-GROUP
> email: ggrothendieck at gmail.com
>
> ______________________________________________
> 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.
>

	[[alternative HTML version deleted]]

