Analysis of Oceanographic Data

Supports the analysis of Oceanographic data, including 'ADCP' measurements, measurements made with 'argo' floats, 'CTD' measurements, sectional data, sea-level time series, coastline and topographic data, etc. Provides specialized functions for calculating seawater properties such as potential temperature in either the 'UNESCO' or 'TEOS-10' equation of state. Produces graphical displays that conform to the conventions of the Oceanographic literature. This package is discussed extensively by Kelley (2018) "Oceanographic Analysis with R" .

Build Status codecov CRAN_Status_Badge RStudio CRAN mirror downloads RStudio CRAN mirror downloads RStudio CRAN mirror downloads Rdoc

Oce is an R package for processing oceanographic data. Its webpage provides details, of which this README file is just a sketch.

Stable versions of the package are normally installed from within R, in the same way as other packages. However, this version is only updated a few times a year (pursuant to CRAN policy), so many users install the develop branch instead. This branch may be updated several times per day, as the authors fix bugs or add features that are motivated by day-to-day usage. This is the branch favoured by users who need new features or would like to contribute to Oce development.

The easy way to install the develop branch is to execute the following commands in R.

install_github('dankelley/oce', ref='develop')

and most readers should also install Ocedata, with

install_github('dankelley/ocedata', ref='master')

Oce is emphatically an open-source system, and so the participation of users is very important. This is why Git is used for version control of the Oce source code, and why GitHub is the host for that code. All users are invited to take part in the development process, by suggesting features, by reporting bugs, or just by watching as others do such things. Oceanography is a collaborative discipline, so it makes sense that the evolution of Oce be similarly collaborative.



  • Renamed 0.9-24, released with OAR book publication.


  • read.odf() stores ODF header in metadata
  • remove makeSection()
  • make defunct: addColumn byteToBinary ctdAddColumn ctdUpdateHeader findInOrdered
  • make defunct: mapZones mapMeridians oce.magic
  • byteToBinary(., endian="little") designated as defunct
  • as.tidem() added
  • read.odf() handles multiple NULL_VALUEs
  • flag improvements
  • rotateAboutZ() added
  • concatenate() added
  • read.woa() added
  • colormap() value has new item 'colfunction'


  • tidem() permits inferred constituents
  • tidem() follows T_TIDE phase convention
  • adorn argument removed from plot functions (after being defunct 1+ year)
  • deprecate findInOrdered()


  • plot,section-method() can use external bathymetry
  • lowpass() added
  • ctdTrim() can isolate upcasts
  • deprecate byteToBinary()
  • address a CRAN NOTE about UTF-8 strings in data


  • adpEnsembleAverage() added
  • mapCoordinateSystem() added
  • woce-exchange missing-value inference
  • woce-exchange autodetection, plus read all data types
  • download.amsr() updated for data-server change
  • download.met() added
  • as.ctd() can specify columns within argo data
  • read.adp.rdi() handles more file types and larger RDI files
  • read.odf() handles contradictory metadata better
  • deprecated
  • oceSetData() handles units better
  • address R_registerRoutines build-time warning
  • fix memory-usage error in coastlineCut()


  • remove observatory object type (changed format, seldom-used type)
  • remove pangaea object type (undocumented format, seldom-used type)
  • improvements for BioArgo data
  • Spanish translation by Pablo Valdés
  • make read.gps() handle more files
  • deprecate ctdAddColumn() and ctdUpdateHeader()
  • download.topo() added and read.topo() updated to handle new formats
  • download.amsr() added
  • composite() added
  • addColumn() marked as deprecated
  • reads all data in file
  • added
  • read.odf() handles Aanderaa current meter data
  • mapPlot() and mapAxis() get cex.axis parameter
  • subset(amsr) added; various other amsr improvements


  • deprecate 'adorn' in plot functions
  • make read.ctd() obey missingValue (renamed)
  • improve map projections
  • add renameData()
  • improve support for SBE files
  • remove is.beam(),, is.enu() and coordinate(), since x[["coordinate"]] now permits these simply
  • replace several function-style accessors with [[ style
  • fix test-suite error relating to an rgdal change
  • add handleFlags() as generic plus specifics for ctd and argo classes
  • use S4 documentation, e.g. ?'plot,ctd-method' instead of ?plot.ctd
  • add subset(argo, "adjusted")
  • make read.argo() read all documented data and metadata fields
  • add trimString()


  • improve plot.coastline() and mapPlot()
  • add support for G1SST satellite
  • all objects now have metadata items for units and flags
  • ctdTrim() method renamed: old A and B are new A; old C is new B
  • support more channels and features of rsk files
  • as.adp() added
  • convert argo objects to sections
  • makeSection() deprecated; use as.section() instead
  • read.adp.rdi() handles Teledyne/RDI vsn 23.19 bottom-track data
  • geodXyInverse() added; geod functions now spell out longitude etc
  • read.odf() speeded up by a factor of about 30
  • add colour palettes from Kristen Thyng's cmocean Python package
  • as.oce() added
  • rename 'drifter' class as 'argo' to recognize what it actually handles
  • add oceColorsViridis()
  • interpBarnes() has new argument 'pregrid'
  • binMean2D() has new argument 'flatten'
  • data(topoWorld) now has longitude from -179.5 to 180
  • ODF2oce() added
  • read.odf() handles more data types
  • read.adp.rdi() reads more VmDas (navigational) data
  • ITS-90 is now the default temperature unit
  • ctd objects can have vector longitude and latitude
  • logger class renamed to rsk
  • bremen class added
  • coastlineCut() added
  • rgdal package used instead of local PROJ.4 source code
  • mapproj-style map projections eliminated


  • remove an exit() call in a C function


  • cite PROJ.4 contributors in DESCRIPTION
  • address package-build warnings; improve DESCRIPTION (thanks, BR)


  • plot.echosounder() gets new argument 'drawPalette'
  • data(landsat) taken from ocedata (and shrunk)
  • data(nao) and data(soi) moved to ocedata
  • mapTissot() added
  • read.logger() with ctd-type data infers salinity if necessary
  • ctdTrim() can have "method" as a function
  • as.topo() can convert "bathy" objects from the marmap package
  • "+.section" renamed sectionAddStation()
  • oceApprox() renamed oce.approx(), with an alias for compatibility
  • oce.grid() added
  • "tdr" class renamed "logger"
  • swCSTp() added
  • swConductivity() now swThermalConductivity(); using Caldwell (1974).
  • many sw*() functions handle eos="gsw"
  • libary(gsw) replaces teos()
  • curl() added
  • handle new NOAA ascii topography dataset type
  • mapGrid() added
  • data(soi) moved to ocedata package
  • lonlat2map() added
  • map2lonlat() made more accurate
  • permit proj4 style map projections
  • landsat-7 (and possibly 4 and 5) support
  • landsat decimation/plotting improvements
  • drifterGrid() added
  • mapDirectionField() added
  • mapArrows() added
  • read.index() added
  • utm2lonlat() and lonlat2utm() added
  • data(met) changed to time of Hurricane Juan


  • fix compile-time warning
  • colormap() added, and functionality added to imagep() and drawPalette()
  • imagep() and drawPalette() new arg. 'axisPalette' (suggested C. Richards)
  • drawPalette() has new args: plot, pos, levels, and cex.axis
  • ctdDecimate() permits user-supplied method function
  • data(nao) added; data(soi) updated, and names improved in latter
  • landsat support added
  • plotProfile() and plotTS() get new argument ''
  • plot.section() grids the data if needed
  • rename 'sealevelHalifax' dataset as 'sealevel'
  • translate some axis names (Spanish, French, German and Mandarin)
  • plotProfile() now has ytype="depth"
  • mapImage() and friends now demand a map exists first
  • runlm() added
  • mapScalebar() added
  • subset.topo() added
  • read.topo() now handles GEBCO netcdf files
  • decimate() now handles topo objects
  • reverse oce.colorsGebco colours for water
  • drawIsopycnals() and plotTS(): improve isopycnal labels
  • ctdDecimate() handles new method 'unesco'
  • coastline improvements (now 3 resolutions)
  • webtide() improvements
  • read.observatory() added
  • read.ctd.itp() added
  • mapImage() speeded up (60X in 1deg SST example)
  • binApply1D() and binApply2D() added
  • binCount1D(), binMean1D(), binCount2D(), and binMean2D() added
  • numberAsHMS() added
  • gps data type added (provisionally)
  • various functions: reorder arguments putting longitude before latitude
  • magneticField() replaces magneticDeclination()
  • ungrid() added
  • mapPlot(): improve zone and meridian aesthetics
  • detrend() returns list with detrend vector and coefs
  • decodeTime() improvements
  • interpBarnes() has new arg 'trim'
  • standardDepths() added
  • mapLongitudeLatitudeXY() added
  • read.ctd.woce() now accepts a format used once by Arctic scientists
  • swRrho() added
  • plotProfile() now accepts type="o"
  • read.adv.nortek(): read salinity
  • ctdDecimate(): fix bug for NULL columns [issue 327]
  • plot.section() now chooses best coastline file
  • swPressure() added
  • ctdFindProfiles() added
  • as.ctd(): new arguments filename etc
  • remove oceBisect(), which merely reproduces uniroot()
  • move large/specialized datasets to library(ocedata)


  • prepare for an upcoming release of R-devel


  • move vignette source directory


  • numberAsPOSIXct() now handles types "sas" and "spss"
  • data(turbulence) added
  • plot.echosounder(): use white for below-threshold values
  • plot.echosounder(): add arg 'beam' to e.g. display Sv
  • read.echosounder(): handle dual-beam and split-beam data
  • read.echosounder(): decode bottom-pick
  • swSoundAbsorption()
  • read.adp: improve doc regarding variable orientation of RDI files


  • improve line breaks in some help pages (thanks, B. Ripley)


  • mapPlot() uses ... graphical parameters (e.g. cex) in labelling axes
  • fix recent bug in reading CNV files (issue 318)
  • plotTS(..., mar=NULL) now avoids setting par(mar)


  • fix memory error in teos handler (thanks, B. Ripley)


  • make ctdTrim() work in R 3.0
  • support for adp vmdas nav data (coded by Clark Richards)
  • approx3d(): added
  • drawPalette(): new arg 'fullpage'
  • plot.lobo(): add 'which' argument
  • read.coastline.openstreetmap() added
  • data(levitus) added
  • plot.coastline(): new arguments 'projection' etc to use mapPlot()
  • mapContour(): permit first argument to be a 'topo' object
  • mapPlot(): add arguments axes, bg, fill, and drawBox


  • address compilation error on Windows-64 platform
  • make some long-running operations more interruptible
  • oceApprox(): permit equal x values [issue 279]


  • halve package check time


  • as.section() added
  • add data(endeavour)
  • add map projections, with provisional functions mapPlot() etc
  • plot.ctd(): add argument 'add'
  • add crude mapping support
  • interpBarnes(): add args 'xgl' and 'ygl'
  • read.section(): add 'directory' argument
  • sectionSmooth(): add 'barnes' method
  • oce.plot.ts() and oce.axis.POSIXct(): add tformat argument
  • read.aquadopp() and cousins added [issues 253 and 258]
  • read.ctd() guesses waterDepth if not supplied [issue 253]
  • plotTS(): extend isopycnal range [issue 252]
  • plot.section() contouring improved
  • data(oceans) added
  • data(papa) added
  • fillGap() works on matrices as well as vectors
  • read.lobo() is more flexible on column names
  • imagep(..., axes=FALSE): no longer plots axis box [issue 249]
  • oce.plot.ts(): alter time auto-ranging method
  • oceBisect(): increase generality of function whose root is sought
  • plotTS(): clean axes after isopycnals drawn
  • teos10: update test values (with help from PB)
  • read.adp.nortek(): handle missing 'to' argument as documented
  • beamUnattenuateAdp() renamed beamUnspreadAdp()
  • plotTS() and plotProfile(): permit type='n'
  • plotProfile(ytype='z'): fix bug in y label
  • improve error message if TEOS-10 is missing


  • example(riley): remove error in R-devel
  • plot.ctd(..., which=7) improvement
  • swSCTp(): accept conductivity in mS/cm and S/m
  • as.ctd(): accept TEOS-10 values SA and CT
  • make TEOS routines more resistant to unphysical values


  • remove unwanted files during build process


  • pwelch(): fix bug in frequency
  • tidem(): add argument 'regress'
  • rename oce.plot.sticks() as plotSticks(); delete stickplot()
  • use S4 style for all plot() methods
  • data(giss) added
  • data(topo2) added
  • plotPolar() added
  • oce.magic() new name for magic(); renamed oceMagic() in 0.9-15
  • errorBars() added
  • numberAsPOSIXct() add a leap second for July 2012


  • plot.topo(): automatic cut-point shift
  • add support for Nortek aquadopp-profiler instruments
  • oce.contour() added
  • lisst class added
  • plotTaylor() added
  • added
  • binmap() added


  • make the newly-added TEOS-10 functions compile on Windows


  • data(cm) added
  • plot.coastline(): improve argument 'geographical'
  • add prettyPosition()
  • add grad()
  • add (preliminary) support for TEOS-10, installed separately
  • add integrateTrapezoid()
  • plotTS(): add argument teos
  • add teos() as an interface to the TEOS-10 library
  • add moonAngle() plus other astronomy functions, e.g. julianDay()


  • plotInset(): remove 'bg' and 'fg' arguments
  • plotTS(): add 'bg' argument
  • rename 'dt' object and functions to 'tdr'
  • plotTS(): add argument 'inset'
  • read.adp.rdi(): fix a bug in bottom-tracking; add soundSpeed vector
  • data(echosounder) created
  • formatPosition() created
  • plot(echosounder): new arguments atTop and labelsTop
  • adp objects now also hold 'percent good' for RDI instruments
  • plot.drifter(): improve multi-panel plots
  • imagep(): add argument 'missingColor'
  • imagep() and drawPalette(): add arguments 'labels' and 'at'


  • imagep(): permit POSIXt type for zlim


  • reconstruct data(ctd) so plot will focus maps better
  • plotInset() added
  • grid() works for oce-based time axes
  • imagep(..., filledContours): obey ylab argument
  • subset(): permit subsetting ADP by pressure
  • oce.plot.ts(): obey arguments xaxt and yaxt
  • improve support for shapefile coastlines


  • replace 'center' argument for plotting topography and coastline with clatitude and clongitude
  • add 'echosounder' class
  • fullFilename(): handle URLs properly
  • ADV objects: add access to slow variables (e.g. headingSlow)


  • add 'met' class
  • subset.oce() handles section objects
  • draw.section(): permit xtype="latitude" or "longitude"
  • imagpe() has drawPalette="space" option


  • fix bug in read.coastline(), reversing lon and lat [issue162]
  • fix bug in S4 adp validity checker
  • geodDist(): add argument 'alongPath'
  • remove compilation warning about doc for summary.ctd()


  • switch to S4 classes, and add new accessors and 'show' functions.
  • add support for RBR 'rsk' files
  • plot.section() now uses 'col' if supplied


  • improve oce.colorsJet()
  • improve plotProfile() vertical range with missing data
  • add data(drag)
  • plotProfile() and plot.ctd(): add xtype="spice"
  • add data(geosecs235)
  • plotProfile() and plot.ctd(): add argument 'keepNA'
  • as.ctd(): add arguments 'other' and 'missingValue'
  • read.lobo(): tolerate more formats, including missing velocities
  • add data(schmitt)
  • add accessor spice()
  • handle O2 and nutrients in CTD data and sections
  • swSCTp(): use surface pressure as a default
  • plotTS(): add arguments inSitu and referencePressure
  • plotTS(): handle section objects
  • fix bugs reported in issues 150, 151, 153, 155, 156
  • imagep(): change default drawContours to FALSE


  • add 'adv' dataset
  • generalize swN2() by adding new arg 'derivs'
  • oce.plot.ts() gets new arg 'axes'
  • add accessor distance()
  • rename to plotTS() and plotScan() to avoid S3 check warnings
  • switch makeFilter's argument asKernel to TRUE


  • add support for ARGO drifters
  • latitude() and longitude(): new argument to repeat byDepth
  • addCtdColumn(): replace if column already exists
  • add CTD accessors for lat, lon, pressure, salinity, temperature


  • plot.sealevel(): only show 3 panels, for clarity
  • plot.ctd(): add argument 'type'
  • imagep(): handle x, y, and z as image() does
  • oce.plot.ts(): inferred ylim matches data range within provided xlim
  • read.adv.nortek(): handle extra analog data
  • add CTD accessors longitude(), latitude(), time(), elevation(), etc


  • add read.oce.odf()
  • add findInOrdered
  • generalize tidem() argument list
  • read.adv.nortek(): handle burst-mode data
  • add datasets wilson, redfieldNP, redfieldNC, redfieldPlankton, and riley
  • change data(ctd) to be derived from data(ctdRaw)
  • change to monitor=FALSE for all reading functions
  • add accessor functions heading(), latitude(), longitude(), pitch(), pressure(), processingLog(), roll(), salinity(), temperature(), time(), and velocity()
  • rename history as processingLog
  • flatten data objects to be 1 level thick (for future matlab exports)
  • add threenum() added, and use it in all summaries (for speed)


  • head.adp() added
  • tail.adp() added
  • extract() added


  • velocityStatistics() added
  • new names: oceApprox() integerToAscii() rangeLimit() ctdRaw
  • topoInterpolate() added
  • numberAsPOSIXct(): add type 'argos'
  • rename beamAttenuateAdp() as beamUnattenuateAdp()


  • camel-case function and argument names (and the NEWS file)


  • add binAverage()
  • fillGap(): add 'rule' argument (analogous to same for approx())
  • add rescale()
  • fix timing error; use to create return value
  • add
  • read.adp.rdi() uses checksums
  •"gps"): account for leap seconds


  • remove warning that occurs for R 2.13.0 (alpha)
  • accept GPS times
  • rename e.g. adv.2enu() as to.enu.adv()
  • speed up conversion of ADP and ADV to enu by more than a factor of 10
  • change RDI coordinate handling
  • rename match.bytes() as matchBytes()
  • add drawpalette()
  • remove matlab2POSIXt(), now a sub-case of
  • added
  • oceBiset(): added
  • despike(): add argument 'action'
  • detrend(): added
  • read.adp.sontek(): handle PCADP type
  • read.adp.sontek.serial(): added
  • read.section(): handle WOCE quality flags for salinity
  • retime(): added
  • read.adv.sontek.serial(): correct error in class of 'a' and 'c'
  • despike(): use string value for argument 'method'
  • logger.toc(): fix bug in discovering files ranging over days
  • as.ctd(): make temperature and salinity into vectors, if not already
  • plot.TS(): add argument 'use.smoothScatter'
  • oce.debug(): flush the console after printing a message
  • sw.theta(): rename the method possibilities, to lower case
  • in some sw functions, rename 'pref' as 'reference.pressure'
  • read.ctd(): fix bug in getting start.time for some time formats
  • pwelch() added
  • plot.sealevel(): make y axis obey range in data subset, if xlim is given
  • adp.2enu() added
  • improve resolution by a factor of 4 or so
  • read.ctd.woce(): infer water depth as max(pressure) if not in header
  • section.smooth(): handle misordered stations; handle missing values better
  • plot.section(): allow strings for 'which'; improve contouring
  • plot.ctd() and plot.profile(): add 'use.smoothScatter' argument
  • coriolis(): improve omega value


  • add despike()
  • add range.limit()
  • add unabbreviate.time()
  • add support for bottom-tracking RDI ADCPs
  • add support for interocean 's4' current meters
  • add unwrap.angle()
  • read.adv.nortek(): detect the velocity range
  • add processing.log.add(), an alternative to processing.log.append()
  • plot.ctd(): add more plot types; which=9 for salinity, not density
  • as.ctd(): improve flexibilty
  • predict.tidem(): add 'newdata' argument
  • adv.2enu() added
  • adp.xyz2enu(): make it correct for heading.bias
  • make.filter(): can now produce tskernel type
  • improve (but temporarily limit)
  • plot.adp(): add 'use.layout' argument
  • window.oce() added
  • make objects remember full filename, not just local filename (issue8)
  • plot.tidem(): remove argument 'plot.type', using 'which' instead
  • add arguments from, by, and to
  • fix issue 57 [read.adp.rdi() read the heading incorrectly]
  • add "rr" method to ctdDecimate()
  • oceApprox() added
  • topoWorld dataset added
  • plot.ctd(): by default, make coastlines extend to box boundaries
  • reformulate sun.angle in R
  • fix google-code issue 56 [plot.topo() should accept land.z=NULL]
  • fix google-code issue 55 [plot.topo() could go past poles]
  • fix google-code issue 54 [plot.topo() was resetting par() on exit]
  • fix google-code issue 53 [interp.barnes() gives poor error msg for mismatched x and y]
  • fix google-code issue 52 [plot.section() draws incorrect bottom shape]


  • add sun.angle [not tested yet; needs R reformulation]
  • fix google-code issue 51 [summary.section() does not report water depth]
  • fix google-code issue 50 [non-bug relating to sun elevation]
  • fix google-code issue 49 [demo(TS) broken]


  • fix google-code issue 48 [oce.plot.sticks() ignored page ratio]
  • fix google-code issue 47 [cannot read new MEDS sealevel format]


  • add data(RRprofile)
  • to plot.TS(), add arguments lwd.rho and lty.rho


  • refactor adp code wrt transformation matrices
  • add matrix.smooth()
  • improve labels for oce.axis.POSIXct()
  • set default for 'debug' argument to getOption("oceDebug") in all functions
  • plot.profile(): add argument ytype; change 'type' to 'xtype'
  • add swZ()
  • add oce.smooth()
  • add read.adv(), etc., supporting Nortek and Sontek devices
  • add read.adp(), etc., supporting Nortek, RDI and Sontek devices
  • add oce.plot.ts()
  • add imagep()
  • add bcd2integer()
  • add matlab2POSIXt()
  • to most plot functions, add 'mgp' and 'mar' arguments
  • add plim and Tlim arguments
  • gravity(): give default for latitude argument
  • plot.sealevel(): remove argument focus.time and add argument which
  • rename tdr functions as pt, to reflect oral convention
  • add geod.xy()
  • add argument 'mgp' to all plotting functions
  • use abbreviations for axis names if space is tight
  • add argument 'adorn' to all plot() functions
  • add oce.colorsTwo(), oce.colorsJet(), and oce.colorsPalette()
  • add byte2binary()
  • add "lty.grid" to all CTD plotting functions
  • add "+.section", a more convenient way to build sections from stations
  • rework summary() for all existing objects
  • as.sealevel(): rename sampling.interval as deltat


  • sw.N2(): make it tolerate NAs; adjust df to make result smoother
  • add makeFilter()
  • add decimate(), which may eventually replace ctd.decimate()
  • read.tdr(): handle 5-column data files; add tz argument
  • plot.profile(): add types sigma+dpdt and sigma+time
  • ctdTrim(): add pmin parameter
  • plot.ctd(): add Slim, Tlim, plim, lonlim, latlim args; add maps
  • add coastline.sle dataset
  • plot.TS(): fix isopycnal labels for fresh water; add args Slim, Tlim
  • read.ctd(): make it understand another SBE format
  • add parseLatlon()
  • oce.edit(): add argument 'action'
  • add oce.write.table()
  • add fillGap()





  • add interp.barnes()


  • fix bug in makeSection (ignored the list, if a list provided)
  • add oce.edit(), later renamed oceEdit()
  • add topoMaritimes dataset
  • add read.topo(), plot.topo(), and summary.topo()
  • add gebcoColors() ... renamed oce.colorsGebco() in version 0.1.77
  • make plot.section() check that pressures coincide


  • plot.TS(): make isopycnal list work better for nearly-fresh water
  • trimCtd(): improve equilibration-phase deletion
  • read.ctd(): handle cases without cruise information or scan column
  • permit setting xlab and ylab in plot.TS()
  • make processing log timestamps be in GMT
  • add as.windrose() and plot.windrose()
  • add sealevel.tuk sea-level dataset
  • add tidem(), predict.tide(), summary.tide(), plot.tide(), data(tidedata)
  • establish a uniform form for objects created by "read" and "as"
  • let swRho() and similar functions take a ctd object as a single argument
  • add swDynamicHeight()
  • make section.grid() and ctd.decimate() extrapolate to surface
  • add summary.oce()
  • make all objects inherit from a new class "oce"
  • fix google-code issue 12: read.sealevel() had a hard-wired filename


  • modify documentation slightly
  • start a migration to more uniform object structures
  • rename as.CTD() to as.ctd(), to make it consistent with similar functions
  • add read.section()
  • add sectionGrid(), which only grids in p at the moment
  • add a03 dataset (renamed 'section' in 0.9-13)
  • fix SF bug 1833719: warnings from read.ctd()
  • fix google-code issue 8: read.coastline() not producing data
  • improve ability of trimCtd() to ignore spurious initial data
  • add "connectPoints" option to plot.TS()
  • add "station" item to "ctd" object
  • change as.CTD() to produce sigma.theta instead of sigma


  • add; increase resolution of coastline.maritimes
  • plot.TS() no longer rotates the RH margin isopycnal labels


  • allow swRho() and similar take matrices as arguments for S, T, etc


  • fix bug in plot.TS() that prevented it from showing some isopycnals


  • switch to UNESCO formulation for sw potential temperature by default
  • prevent warnings with C90 compiler on some machines


  • add read.oce(), a generic function for reading several oceanographic files
  • make read.ctd() understand WOCE-exchange files
  • make read.sealevel() understand comma-separated data from MEDS
  • make plot.sealevel() skip spectral graphs if timeseries has NA values
  • improve aesthetics of plot.ctd()
  • extend plot.sealevel() by adding focus.time argument
  • add ctdDecimate()
  • add
  • add latlonFormat(), latFormat(), and lonFormat()
  • add as.coastline()
  • add make.section()
  • add summary.section()
  • add plot.section()
  • add data(section)


  • add swSoundSpeed()


  • add historyAppend() (later named processingLogAppend()) and related code
  • improve ctdTrim()


  • add rudimentary read/summary/plot functions for lobo datasets


  • add vignette; address some build-stage warning messages


  • set up data files to permit latin1 encoding of some content


  • rename all seawater-related functions to e.g. swTheta(), to allow for atmospheric analogs


  • make as.CTD() accept length(p)=1, e.g. for surface plots


  • make read.coastline() handle S files


  • keep swTheta() from complaining if length(p) = 1


  • add swAlpha() and swBeta()


  • add swAlphaOverBeta()


  • document the use of df in swN2(), plot.ctd(), etc.


  • permit swRho() (and similar) to take NAs in args (bug B32)


  • permit swRho() and descendants to take scalar pressure.


  • add as.CTD()


  • add "UNESCO1983" formulation to swTheta() as an alternative


  • speed up swTheta() by moving vector work from R to C


  • make geodDist() accept a vector for location 1 and a scalar for location 2


  • make read.coastline() understand matlab and Splus formats


  • make plot.coastline() scale lat and lon correctly


  • add read.coastline(), summary.coastline(), and plot.coastline()


  • add as.sealevel()


  • add read.sealevel(), summary.sealevel(), and plot.sealevel()


  • add name option to plot.ctd.scan()


  • add lapse.rate()


  • fix B27 (header not updated for columns added during read.ctd)


  • rename as ctdTrim()
  • rename to ctdWrite()


  • add write.ctd()
  • add ctdAddColumn()
  • add ctdUpdateHeader()


  • add plot.ctd.scan()


  • make read.ctd() calculate S if missing but C, T, and p are given
  • add swSCTp()


  • add swConductivity()


  • rename to swRho()


  • use namespace


  • add oce.viscosity()


  • fix B23 (not done yet)
  • fix B22 (not done within oce; done at system level)


  • add pressure method to trimCtd()


  • vectorize swRho() since it was too slow on large datasets


  • make demo(oce.ctd) print data


  • fix some documentation errors that the 2.0.0 CHECK noticed


  • profiles have correct y-axis
  • OSX port, but must first do e.g. export PKG_LIBS="-L/sw/lib"


  • OSX port (you must first do export PKG_LIBS="-L/sw/lib")


  • add trim.ctd()


  • permit lat/lon with the "N"-type indicator at start


  • fix bug B16 (label the isopycnals on TS diagram)


  • make read.ctd handle more file types


  • add oceCoriolis, oceDepth, oceGravity, oceTFreeze


  • add oceSpecificHeat oce.N2; fix bug B18


  • get data(ctd) working


  • add oceSTRho


  • fix bug B15 (maybe)


  • add oceTSRho


  • fix bugs B10, B11, and B13


  • fix bugs B6, B7, and B12


  • add geodDist()
  • add plot.ctd(), which is rudimentary for now
  • fix bug B8


  • add spice() function


  • permit all eos functions to handle missing values
  • fix bug B4


  • add summary(ctd) method.
  • make read.ctd() return an object of type ctd.
  • get tests/ working.


  • create tests/oce.test1.R


  • add oceSigma(), oceSigmaT(), oceSigmaTheta()


  • permit various EOS functions to handle lists
  • fix bug B3


  • add ocerho()


  • fix file-path bug
  • fix bug B2


  • add theta()
  • fix bug B1


  • add read.ctd()

Reference manual

It appears you don't have a PDF plugin for this browser. You can click here to download the reference manual.


1.5-0 by Dan Kelley, 19 days ago

Report a bug at

Browse source code at

Authors: Dan Kelley [aut, cre] , Clark Richards [aut] , Chantelle Layton [ctb] , curl() coauthor) , British Geological Survey [ctb, cph] (magnetic-field subroutine)

Documentation:   PDF Manual  

Task views: Analysis of Ecological and Environmental Data, Handling and Analyzing Spatio-Temporal Data

GPL (>= 2) license

Imports Rcpp

Depends on gsw, methods, utils

Suggests akima, automap, DBI, foreign, knitr, lubridate, marmap, ncdf4, ocedata, raster, rgeos, rmarkdown, RSQLite, R.utils, sf, sp, testthat, tiff, XML

Linking to Rcpp

Imported by SWMPr, argoFloats, dendroTools, morphomap, skyscapeR, soundecology, vprr.

Depended on by seacarb.

Suggested by graticule, oceanwaves.

See at CRAN