You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

55 lines
2.0 KiB
R

source("/home/taha/chepec/chetex/common/R/common/ProvideSampleId.R")
Raman2df <- function(datafilename) {
## Description:
## Reads Raman data in ASCII format
## (wavenumber, counts)
## and returns a dataframe with the original data,
## as well as interpolated wavenumber and counts values
## (interpolated data is evenly spaced along x-axis)
## Usage:
## Raman2df(datafilename)
## Arguments:
## datafilename: text string with full path to experimental file
## Value:
## Dataframe with the following columns (and no extra attributes):
## $ sampleid : chr (id)
## $ wavenum : num (measure)
## $ counts : num (measure)
## $ wnum.interp : num (measure)
## $ cts.interp : num (measure)
## Note:
##
#
datafile <- file(datafilename, "r")
chifile <- readLines(datafile, n = -1) #read all lines of input file
close(datafile)
#
#####
sampleid <- ProvideSampleId(datafilename)
#
ff <- data.frame(NULL)
zz <- textConnection(chifile, "r")
ff <- rbind(ff, data.frame(stringsAsFactors = FALSE,
sampleid,
matrix(scan(zz, what = numeric(), sep = "\t"),
ncol = 2, byrow = T)))
close(zz)
names(ff) <- c("sampleid", "wavenum", "counts")
# Sort dataframe by increasing wavenumbers
ff <- ff[order(ff$wavenum), ]
# ... sort the rownames as well
row.names(ff) <- seq(1, dim(ff)[1])
# Add interpolated, evenly spaced data to dataframe
ff <- cbind(ff,
wnum.interp = approx(x = ff$wavenum,
y = ff$counts,
method = "linear",
n = length(ff$wavenum))$x,
cts.interp = approx(x = ff$wavenum,
y = ff$counts,
method = "linear",
n = length(ff$wavenum))$y)
##
return(ff)
}