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.sar...@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.4...@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 <r...@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.dun...@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@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@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@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. ______________________________________________ R-help@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.