readCGATS: read tables from files in ANSI/CGATS.17 format

Description Usage Arguments Details Value Note References See Also Examples

View source: R/CGATS.R


The CGATS text format supports a preamble followed by N tables, where N 1. Each table can have a separate header. A table may or may not contain spectral data, see Note. The function converts each table to a data.frame with attributes; see Details.


readCGATS( path, collapsesingle=FALSE )



the path name of a single file, in CGATS format


If path has only one table (N=1) and collapsesingle is TRUE, then return the single data.frame (instead of a list with 1 data.frame). If path has multiple tables (N 2), then collapsesingle is ignored.


The returned list is given attributes: "path", "preamble", and (if present) "date", "created", "originator", and "file_descriptor". The attribute values are all character vectors. The value of attribute "path" is the argument path, and the other values are extracted from "preamble". The length of "preamble" is (typically) greater than 1, and the others have length 1. Each line of the preamble is a keyword-value pair. The keyword ORIGINATOR is converted to attribute "originator". The keyword FILE_DESCRIPTOR is converted to attribute "file_descriptor". The keyword CREATED is converted to attributes "created" and "date". The list is also given names. If the keyword TABLE_NAME is present in the table header, then its value is used. Otherwise the names are "TABLE_1", "TABLE_2", ...

Each data.frame in the list is assigned attributes: "header", and (if present) "descriptor". The length of "header" is (typically) greater than 1, and "descriptor" has length 1. Each line of the table header is a keyword-value pair. The keywords DESCRIPTOR and TABLE_DESCRIPTOR are converted to attribute "descriptor".

For the lines between BEGIN_DATA and END_DATA, two conventions for separating the values are supported:

The function readCGATS() selects the separation convention by examining the line after BEGIN_DATA_FORMAT. If this line is split by a single tab and the number of fields matches that given on the NUMBER_OF_FIELDS line, then the non-standard convention is selected; otherwise, the standard convention is selected.


readCGATS() returns a list of data.frames - one data.frame for each table found in path. The list and each individual data.frame have attributes, see Details.

If path has only a single table (the majority of files have only 1) and collapsesingle is TRUE, then the attributes of the list are copied to those of the data.frame, and the data.frame is then returned. The name of the table is lost.

If there is an error in any table, then the function returns NULL.


In the BEGIN_DATA_FORMAT line(s), field names may not be quoted and may not have embedded spaces.
The CGATS standard allows duplicated field names, and readCGATS() returns them as they appear, with no attempt to append numbers in order to make them unique. Examples of field names which may be duplicated are: SPECTRAL_NM, SPECTRAL_DEC, and SPECTRAL_PCT; for more on these see readSpectraCGATS().
No attempt is made to recognize those tables that contain spectral data. For conversion of spectral data to colorSpec objects, see readSpectraCGATS().


ANSI/CGATS.17. Graphic technology - Exchange format for colour and process control data using XML or ASCII text. 2009.

ISO/28178. Graphic technology - Exchange format for colour and process control data using XML or ASCII text. 2009.

CGATS.17 Text File Format.

See Also

readSpectraCGATS, scan, strsplit, names


#   read file with 2 tables of non-spectral data
A70 = readSpectra( system.file( "tests/A70.ti3", package='colorSpec' ) )
length(A70)         # [1] 2   # the file has 2 tables
ncol( A70[[1]] )    # [1] 7   # the 1st table has 7 columns
ncol( A70[[2]] )    # [1] 4   # the 2nd table has 4 columns

colorSpec documentation built on April 2, 2018, 5:05 p.m.