Bert Gunter
2024-Jul-20 23:02 UTC
[R] [External] Using the pipe, |>, syntax with "names<-"
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 at 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 at 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 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. >
Deepayan Sarkar
2024-Jul-21 05:07 UTC
[R] [External] Using the pipe, |>, syntax with "names<-"
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" > za 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 at 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 at 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 at 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 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. > > > > ______________________________________________ > 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. >[[alternative HTML version deleted]]