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.