[R] [External] Using the pipe, |>, syntax with "names<-"

Jeff Newmiller jdnewm|| @end|ng |rom dcn@d@v|@@c@@u@
Sun Jul 21 08:49:55 CEST 2024


I think that the simplicity of setNames is hard to beat:

z |> setNames( c( "a", "foo" ) )

and if you are determined not to load dplyr then

column_rename <- function( DF, map ) {
  on <- names( DF )
  on[ match( map, on ) ] <- names( map )
  names( DF ) <- on
  DF
}

is more robust to column reorganization than replace():

z |> column_rename( c( foo = "b" ) )


On July 20, 2024 10:07:57 PM PDT, Deepayan Sarkar <deepayan.sarkar using gmail.com> wrote:
>The main challenge in Bert's original problem is that `[` and `[<-` cannot
>be called in a pipeline. The obvious solution is to define named versions,
>e.g.:
>
>elt <- `[`
>`elt<-` <- `[<-`
>
>Then,
>
>> z <- data.frame(a = 1:3, b = letters[1:3])
>> z |> names() |> elt(2)
>[1] "b"
>> z |> names() |> elt(2) <- "foo"
>> z
>  a foo
>1 1   a
>2 2   b
>3 3   c
>
>You could actually also do (using a similar function already defined in
>methods)
>
>z |> names() |> el(2) <- "bar"
>
>Iris's _ trick is of course a nice alternative; and this example in ?pipeOp
>already covers it:
>
># using the placeholder as the head of an extraction chain:
>mtcars |> subset(cyl == 4) |> lm(formula = mpg ~ disp) |> _$coef[[2]]
>
>While the replacement question is a nice exercise, I am not sure about the
>value of emphasizing that you can use pipes to do complex assignments.
>Doesn't that defeat the whole purpose of piping? For one thing, it will
>necessarily terminate the pipe. Also, it will not work if the starting
>value is not a variable. E.g.,
>
>> data.frame(a = 1:3, b = letters[1:3]) |> names() |> _[2] <- "bar"
>Error in names(data.frame(a = 1:3, b = letters[1:3]))[2] <- "bar" :
>  target of assignment expands to non-language object
>
>Duncan's rename() approach, which will just change the column name and
>return the modified object, seems more useful as part of a pipeline.
>
>Best,
>-Deepayan
>
>On Sun, 21 Jul 2024 at 04:46, Bert Gunter <bgunter.4567 using gmail.com> wrote:
>
>> I second Rich's excellent suggestion.
>>
>> As with all elegant solutions, Iris's clicked on the wee light bulb in
>> my brain, and I realized that a slightly more verbose, but perhaps
>> more enlightening, alternative may be:
>>
>> z |>  attr("names") |> _[2] <- "foo"
>>
>> However, I would add this as an example *only with* Iris's solution.
>> Hers should be shown whether or not the above is.
>>
>> Cheers,
>> Bert
>>
>> On Sat, Jul 20, 2024 at 3:35 PM Richard M. Heiberger <rmh using temple.edu>
>> wrote:
>> >
>> > I think Iris's solution should be added to the help file: ?|>
>> > there are no examples there now that show assignment or replacement
>> using the "_"
>> >
>> > > On Jul 20, 2024, at 18:21, Duncan Murdoch <murdoch.duncan using gmail.com>
>> wrote:
>> > >
>> > > On 2024-07-20 6:02 p.m., Iris Simmons wrote:
>> > >> z <- data.frame(a = 1:3, b = letters[1:3])
>> > >> z |> names() |> _[2] <- "foo"
>> > >> z
>> > >
>> > > That's a great suggestion!
>> > >
>> > > Duncan Murdoch
>> > >
>> > > ______________________________________________
>> > > R-help using 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.
>> >
>>
>> ______________________________________________
>> R-help using 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.
>>
>
>	[[alternative HTML version deleted]]
>
>______________________________________________
>R-help using 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.

-- 
Sent from my phone. Please excuse my brevity.



More information about the R-help mailing list