[R] Using the pipe, |>, syntax with "names<-"
    Bert Gunter 
    bgunter@4567 @end|ng |rom gm@||@com
       
    Sat Jul 20 22:06:52 CEST 2024
    
    
  
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
    
    
More information about the R-help
mailing list