6. How raster functions map to stars functions

Sébastien Rochette, Adriano Fantini, Edzer Pebesma

For a better version of the stars vignettes see https://r-spatial.github.io/stars/articles/

Here’s an attempt at the table describing how raster functions map to stars functions, discussed in issue #122. This table uses the functionality of the raster package as a template; it may be incomplete, imprecise or plain wrong, so take it with a pinch of salt. Any comment or correction is hugely appreciated, please contribute!

Some of the functions (filter, slice, mutate, select, pull, …) are provided via dplyr, which must be loaded. See ?stars::dplyr.


? = Not sure / unknown

* = Not present, low priority

# = Not present, high priority

NA = Not available by design

Creating objects

raster stars Note/comment
{raster, stack, brick} (read) read_stars or read_stars(along = …)
{stack, brick} (concatenate layers) c or c(along = …)
subset {[ ] , slice, filter}
addLayer c() or c(along = …)
dropLayer {[ ] , slice, filter}
unstack combine lapply and {[ ] , slice, filter}

Changing spatial extent and/or resolution of objects

raster stars Note/comment
merge c #, currently only works for adjacent objects
mosaic st_mosaic these are not identical, read the docs carefully
crop filter, st_crop
setExtent # maybe use st_warp?
trim #
aggregate aggregate WIP; raster’s aggregate with fact=2 will not work, use st_warp in that case?
disaggregate # use st_warp(use_gdal = TRUE)?
resample {st_transform, st_warp}
projectRaster {st_transform, st_warp}
shift #, now use st_set_dimensions
flip [] with reversed index #
rotate *
t NA

Cell based computation

raster stars Note/comment
calc st_apply
overlay c(along = , …) %>% st_apply(…)
cover [ ] <-
mask [ ], st_crop when using an sf polygon as mask
mask [ ]<- NA when using a stars object to mask
cut cut
reclassify mutate with case_when or forcats::fct_recode ?
reclassify cut see https://stackoverflow.com/questions/70619002/reclassify-2d-stars-array/
init [ ] <-
stackApply {[ ] , slice, filter} %>% st_apply

Spatial contextual computation

raster stars Note/comment
distance #
gridDistance *
distanceFromPoints #
direction *
focal f = st_apply(x1, 3, foc, w = matrix(1, 3, 3)) See. issue 176
localFun *
boundaries st_as_sf(as_points=FALSE, merge=TRUE, connect8=TRUE)
clump st_as_sf(r, merge = TRUE) st_as_sf returns polygons, clump a raster
adjacent *
area st_area
terrain #

Model predictions

raster stars Note/comment
predict predict
interpolate gstat::idw, gstat::krige st_warp has raster-raster interpolations of gdalwarp

Data type conversion

raster stars Note/comment
rasterize st_as_stars
rasterToPoints st_as_sf(as_points=TRUE)
rasterToPolygons st_as_sf(as_points=FALSE, …), st_polygonize
rasterToContour st_contour requires GDAL >= 2.4.0


raster stars Note/comment
cellStats st_apply
summary print, summary(as.vector(. %>% pull))
freq table *
unique unique(as.vector(. %>% pull))
zonal *

Accessing values of objects

raster stars Note/comment
getValues {pull, [[ ]]}
getValuesBlock {[ ] , slice, filter} %>% pull
getValuesFocal {[ ] , slice, filter} %>% pull
as.matrix [[ ]] currently behaves somewhat unexpectedly *
as.array [[ ]] currently behaves somewhat unexpectedly *
extract (by cell) {[ ] , slice, filter}
extract (by polygon) x[sf_object]
extract (by point) aggregate(stars_object, sf_object, function(x) x[1], as_points = FALSE)
sampleRandom *
sampleRegular *
minValue purrr::map(x, min)
maxValue purrr::map(x, max)
setMinMax ,


raster stars Note/comment
plot plot, geom_stars
plotRGB plot(x, rgb =…)
spplot -
image image
persp -
contour (st_contour, then sf::plot)
filledContour (same)
text text
hist hist(x[[1]])

Getting and setting dimensions

raster stars Note/comment
ncol dim(x)[1] or use name instead of 1; cols may be the second dimension!
nrow dim(x)[2] or use name instead of 2; rows may be the first dimension!
ncell prod(dim(x))
res st_dimensions can also not be a constant in case of rectilinear or curvilinear grids
nlayers - there is no concept of layers in stars
names names
xres st_res(x)[1] may not be a constant in case of rectilinear or curvilinear grids
yres st_res(x)[2] may not be a constant in case of rectilinear or curvilinear grids
xmin st_bbox(x)[1]
xmax st_bbox(x)[3]
ymin st_bbox(x)[2]
ymax st_bbox(x)[4]
extent st_bbox(x) different ordering of numbers
origin -
projection st_crs(x)
isLonLat st_is_longlat(st_crs(x))
filename stars_proxy objects carry file names where otherwise the array data is
bandnr stars has no general concept of bands
nbands dim(x)[3] may also be time; bands may also be in another dimension, or have another name
compareRaster all.equal(st_dimensions(x), st_dimensions(y)) *
NAvalue -

Computing row, column, cell numbers and coordinates

raster stars Note/comment
xFromCol st_get_dimension_values(., ‘x’)[col] I am not sure how to generally get the x dimension name - here it is x
yFromRow st_get_dimension_values(., ‘y’)[row] I am not sure how to generally get the y dimension name - here it is y
colFromX *
rowFromY *
cellFromXY st_cells()
coordinates st_coordinates
validCol col %>% between(st_dimensions(.)\(x\)from, st_dimensions(.)\(x\)to) raster columns are not always named ‘x’
validRow row %>% between(st_dimensions(.)\(y\)from, st_dimensions(.)\(y\)to) raster columns are not always named ‘y’
setValues [ ] <-
writeRaster write_stars currently uses GDAL, somewhat limited

The format of this table follows the raster-package entry in the raster manual, found at https://cran.r-project.org/web/packages/raster/raster.pdf.