Added function to read Perkin-Elmer spectra files.

This function reads *.SP files (ASCII), and currently fetches only data (no meta-data).
master
Taha Ahmed 13 years ago
parent 98dcf3b7a3
commit 5ee85d580e

@ -0,0 +1,49 @@
##################################################
#################### SP2df #######################
##################################################
SP2df <- function(datafile) {
## Description:
## For now just extracting the bare minimum (the data itself) from SP (ASCII) spectra files.
## Usage:
## SP2df(datafile)
## Arguments:
## datafile: text string with full path to TXT file
## containing single or multiple data ranges
## Value:
## Dataframe with the following columns:
## $ sampleid : chr
## $ wavelength : num
## $ intensity : num
#
range.data.start.rexp <- "\\#DATA"
#range.data.end.rexp <- ">+End[\\s\\w]*<+"
# Read the input file
dfile <- file(datafile, "r")
# Note that readLines apparently completely skips empty lines.
# That causes line numbers to not match between source and f vector.
f <- readLines(dfile, n=-1) # read _all_ lines from data file
close(dfile)
# Create a sampleid for the current job (use the folder name)
sampleid <- basename(dirname(datafile))
# Look for data start marker line
range.data.start.row <- grep(range.data.start.rexp, f, perl = TRUE) + 1
# Data ends one line before EOF
range.data.end.row <- length(f) - 1
# Extract data (as-is)
data.raw <- f[range.data.start.row:range.data.end.row]
# Collect data into dataframe
zz <- textConnection(data.raw, "r")
data <- data.frame(stringsAsFactors = FALSE,
sampleid,
matrix(scan(zz, what = numeric()), ncol = 2, byrow = T))
close(zz)
names(data) <- c("sampleid", "wavelength", "intensity")
return(data)
}
Loading…
Cancel
Save