library(quadmesh)
library(raster)
#> Loading required package: sp
library(sf)
#> Linking to GEOS 3.6.2, GDAL 2.3.2, PROJ 4.9.3
library(lwgeom)
#> Linking to liblwgeom 2.5.0dev r16016, GEOS 3.6.2, proj.4 4.9.3
library(reproj)
library(rgdal)
#> rgdal: version: 1.3-6, (SVN revision 773)
#>  Geospatial Data Abstraction Library extensions to R successfully loaded
#>  Loaded GDAL runtime: GDAL 2.3.2, released 2018/09/21
#>  Path to GDAL shared files: /usr/local/share/gdal
#>  GDAL binary built with GEOS: TRUE 
#>  Loaded PROJ.4 runtime: Rel. 4.9.3, 15 August 2016, [PJ_VERSION: 493]
#>  Path to PROJ.4 shared files: (autodetected)
#>  Linking to sp version: 1.3-1
xy <- coordinates(etopo)

## we want "p_?" the matrix of coordinates in LAEA
ll <- "+proj=longlat +datum=WGS84"
prj <- "+proj=laea +datum=WGS84"


mpt <- st_sfc(st_multipoint(xy), crs = ll)
pt <- st_sfc(lapply(split(t(xy), rep(seq_len(nrow(xy)), each = 2)), st_point), crs = ll)
library(bench)

a <- bench::mark(
            lwgeom_mpt = st_coordinates(st_transform_proj(mpt, prj))[, 1:2, drop = FALSE],   # 0.147s
            reproj = reproj(xy, target = prj, source = ll)[, 1:2, drop = FALSE],             # 0.021s
            lwgeom_pt = st_coordinates(st_transform(pt, prj))[, 1:2, drop = FALSE],          # 2.36s
            rgdal = rgdal::project(xy, prj),                                                 # 0.019s
            iterations = 20,
            check = FALSE)
#> Warning: Some expressions had a GC in every iteration; so filtering is
#> disabled.

library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:raster':
#> 
#>     intersect, select, union
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union
a %>% select(expression, median, `itr/sec`, mem_alloc, total_time) %>% arrange(desc(total_time))
#> # A tibble: 4 x 5
#>   expression   median `itr/sec` mem_alloc total_time
#>   <chr>      <bch:tm>     <dbl> <bch:byt>   <bch:tm>
#> 1 lwgeom_pt     2.02s     0.488    19.7MB     41.01s
#> 2 lwgeom_mpt  139.8ms     6.99    12.11MB      2.86s
#> 3 rgdal       19.43ms    30.8      5.07MB   648.58ms
#> 4 reproj      21.61ms    40.1     11.53MB   499.12ms

Created on 2018-12-19 by the reprex package (v0.2.1)