Iris's reply is what I was looking for. Many thanks -- I can now sleep
tonight!
Both Rui's and Duncan's responses merely hid what I wanted to avoid. I
hope that I did not occupy much of your times on my useless question
and rather pathetic attempts at an answer.
Cheers,
Bert
On Sat, Jul 20, 2024 at 3:02?PM Iris Simmons <ikwsimmo at gmail.com>
wrote:>
> It should be written more like this:
>
> ```R
> z <- data.frame(a = 1:3, b = letters[1:3])
> z |> names() |> _[2] <- "foo"
> z
> ```
>
> Regards,
> Iris
>
> On Sat, Jul 20, 2024 at 4:47?PM Bert Gunter <bgunter.4567 at
gmail.com> wrote:
> >
> > With further fooling around, I realized that explicitly assigning my
> > last "solution" 'works'; i.e.
> >
> > names(z)[2] <- "foo"
> >
> > can be piped as:
> >
> > z <- z |>(\(x) "names<-"(x,value =
"[<-"(names(x),2,'foo')))()
> > > z
> > a foo
> > 1 1 a
> > 2 2 b
> > 3 3 c
> >
> > This is even awfuller than before. So my query still stands.
> >
> > -- Bert
> >
> > On Sat, Jul 20, 2024 at 1:14?PM Bert Gunter <bgunter.4567 at
gmail.com> wrote:
> > >
> > > Nope, I still got it wrong: None of my approaches work. :(
> > >
> > > So my query remains: how to do it via piping with |> ?
> > >
> > > Bert
> > >
> > >
> > > On Sat, Jul 20, 2024 at 1:06?PM Bert Gunter <bgunter.4567 at
gmail.com> wrote:
> > > >
> > > > This post is likely pretty useless; it is motivated by a
recent post
> > > > from "Val" that was elegantly answered using
Tidyverse constructs, but
> > > > I wondered how to do it using base R only. Along the way, I
ran into
> > > > the following question to which I think my answer (below) is
pretty
> > > > awful. I would be interested in more elegant base R
approaches. So...
> > > >
> > > > z <- data.frame(a = 1:3, b = letters[1:3])
> > > > > z
> > > > a h
> > > > 1 1 a
> > > > 2 2 b
> > > > 3 3 c
> > > >
> > > > Suppose I want to change the name of the second column of z
from 'b'
> > > > to 'foo' . This is very easy using nested function
syntax by:
> > > >
> > > > names(z)[2] <- "foo"
> > > > > z
> > > > a foo
> > > > 1 1 a
> > > > 2 2 b
> > > > 3 3 c
> > > >
> > > > Now suppose I wanted to do this using |> syntax, along
the lines of:
> > > >
> > > > z |> names()[2] <- "foo" ## throws an error
> > > >
> > > > Slightly fancier is:
> > > >
> > > > z |> (\(x)names(x)[2] <- "b")()
> > > > ## does nothing, but does not throw an error.
> > > >
> > > > However, the following, which resulted from a more careful
read of
> > > > ?names works (after changing the name of the second column
back to "b"
> > > > of course):
> > > >
> > > > z |>(\(x) "names<-"(x,value =
"[<-"(names(x),2,'foo')))()
> > > > >z
> > > > a foo
> > > > 1 1 a
> > > > 2 2 b
> > > > 3 3 c
> > > >
> > > > This qualifies to me as "pretty awful." I'm
sure there are better ways
> > > > to do this using pipe syntax, so I would appreciate any
better
> > > > approaches.
> > > >
> > > > Best,
> > > > Bert
> >
> > ______________________________________________
> > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> > 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.