Learn R Programming

multifwf (version 0.2.2)

read.multi.fwf: Read Fixed Width Format Files containing lines of different Type

Description

Read a table of fixed width formatted data of different types into a data.frame for each type.

Usage

read.multi.fwf(file, multi.specs, select, header = FALSE, sep = "\t", skip = 0, n = -1, buffersize = 2000, ...)

Arguments

file
the name of the file which the data are to be read from.

Alternatively, file can be a connection, which will be opened if necessary, and if so closed at the end of the function call.

multi.specs
A named list of data.frames containing the following columns:
widths
see read.fwf
col.names
see read.table
row.names
see read.table

For more info on these fields see read.fwf.

Note that each list item should have a name. This is important for the select function.

select
A function to select the type of a line. This selector should have parameters:
line
the line
specs
the multi.specs list that was passed to read.multi.fwf
The select function should return the name of the spec that matches the line. read.multi.fwf will then use this name to select the a spec from the passed multi.spec. This is why multi.spec should be a named list. If there is no match then NULL can be returned.
header
a logical value indicating whether the file contains the names of the variables as its first line. If present, the names must be delimited by sep.
sep
character; the separator used internally; should be a character that does not occur in the file (except in the header).
skip
number of initial lines to skip; see read.fwf.
n
the maximum number of records (lines) to be read, defaulting to no limit.
buffersize
Maximum number of lines to read at one time
...
further arguments to be passed to read.fwf.

Value

Return value is a named list with an item for each spec in multi.spec. If there was at least one line in file, matching a spec, then the named item will be a data.frame. Otherwise it will be NULL.

Details

Known bugs: Warnings on connections that are left open. Haven't figured this out yet. Somehow some files are left opened.

See Also

read.fwf

Examples

Run this code
ff <- tempfile()
cat(file = ff, '123456', '287654', '198765', sep = '\n')
specs <- list()
specs[['sp1']] = data.frame(widths = c(1, 2, 3), 
                            col.names = c('Col1', 'Col2', 'Col3'))
specs[['sp2']] = data.frame(widths = c(3, 2, 1), 
                            col.names = c('C1', 'C2', 'C3'))

myselector <- function(line, specs) {
    s <- substr(line, 1, 1)
    spec_name = ''
    if (s == '1')
        spec_name = 'sp1'
    else if (s == '2')
        spec_name = 'sp2'

    spec_name
}

read.multi.fwf(ff, multi.specs = specs, select = myselector)    
#> sp1: 1 23 456 \ 1 98 765, sp2: 287 65 4

unlink(ff)

Run the code above in your browser using DataLab