I feel like I must be missing something really simple, but I do not understand why these seemingly equivalent constructions are giving different results. Pulling my hair out...
I believe you are confusing sf::st_buffer() with functions from {dplyr} and its tidyverse ilk. These implement data masking approach - which is technically speaking a non-standard evaluation, even though the "non-standard" is a bit tricky word given the wide spread of of tidyverse as compared to base R.
Given that we are talking in Posit's house I will stop here
In any case this will work; note that it was necessary to access the mag (short for magnitude) column via the dollar sign notation, which is the "standard" evaluation approach.
library(sf)
sf_quakes <- quakes %>% # dataframe that lives in {datasets}
head() %>%
st_as_sf(coords = c("long", "lat"), crs = 4326) # from regular data frame to sf object
sf_quakes %>%
st_buffer(.$mag * 10000) %>%
mapview::mapview()
Most sf functions work just fine in a pipeline. I use them all the time, and in the book by Robin Lovelace he has several examples of sf functions being part of a pipeline.
I fully agree, but with a comment: your issue is not with the usage of pipeline per se, but with the fact that sf::st_buffer() does not subscribe to {dplyr} idea of data masking (see the link in my original post) and when provided with Radius for buffer size it will look for object named Radius in your environment, not for column named Radius in the data frame that was piped to it.
Which is why it will work with both:
sf::st_buffer(Quakes_2, Quakes_2$Radius) = the Radius column of the quakes data frame quoted via dollar sign as per base R specs
Quakes_2 %>% sf::st_buffer(.$Radius) = the Radius column of the dataframe piped in via {magrittr} pipe operator & using the dot shortcut for "current lhs result" as per {magrittr} specs