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*<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
> stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
[[alternative HTML version deleted]]