转换ChemoSpec包的光谱数据中的矩阵txt文件

时间:2011-07-01 14:33:30

标签: r windows-7

我想使用质量约为60'000 datapoint的ChemoSpec。

我已将它们作为矩阵放在一个txt文件中(X + 90个样本= 91列; 60'000行)。

我如何将此文件作为光谱数据进行调整,而不再以csv格式再次导出每个文件(考虑到我的数据大小,这在R中相当长)?

3 个答案:

答案 0 :(得分:0)

将数据导入ChemoSpec的典型(且唯一?)方式是通过 getManyCsv() 功能,正如问题所示需要一个CSV文件每个样本。

从91列创建90个CSV文件 - 所描述的60,000行文件,在R中可能有点慢和乏味,但可以使用独立应用程序完成,无论是现有实用程序还是某些特殊脚本。

仅限R的解决方案是创建一个新方法,例如 getOneBigCsv(),改编自 getManyCsv() 。毕竟,the logic of getManyCsv()相对简单 不要指望这样的解决方案快速发展,但无论如何,它应该与运行getManyCsv()所需的时间相比较,并且避免必须创建和管理许多文件,因此总体上更快,当然也不那么混乱

答案 1 :(得分:0)

抱歉,我错过了你的问题2天前。我是ChemoSpec的作者 - 除了在某个地方发帖外,我总是随时直接写信给我。

解决方案很简单。您已经将数据放在矩阵中(在使用>read.csv("file.txt")读取之后。)因此您可以使用它来手动创建Spectra对象。在R控制台中键入?Spectra以查看Spectra对象的结构,它是一个包含特定条目的列表。你需要将你的X列(我假设是质量)放入freq槽中。然后数据矩阵的其余部分将进入数据槽。然后手动创建其他所需的条目(确保数据类型正确)。最后,通过执行类似>class(my.spectra)< - “Spectra”的操作,将Spectra类分配到已完成的列表中,你应该很高兴。我可以如果您更全面地描述数据,可以在列表中提供更多详细信息。或许您已经解决了问题?

顺便说一下,ChemoSpec完全没有经过MS数据测试,但我很想知道它对你有用。可能会有一些有用的变化,所以我希望你能给我反馈。

祝你好运,让我知道我还能提供什么帮助。

答案 2 :(得分:0)

很多年过去了,我不确定是否有人对此主题仍然感兴趣。但是我遇到了同样的问题,并做了一些变通方法,通过从数据本身中提取信息来将数据转换为“ Spectra”类:

#Assumption:
# Data is stored as a numeric data.frame with column names presenting samples
# and row names including domain axis

dataframe2Spectra <- function(Spectrum_df,
                              freq = as.numeric(rownames(Spectrum_df)),
                              data = as.matrix(t(Spectrum_df)), 
                              names = paste("YourFileDescription", 1:dim(Spectrum_df)[2]), 
                              groups = rep(factor("Factor"), dim(Spectrum_df)[2]), 
                              colors = rainbow(dim(Spectrum_df)[2]), 
                              sym = 1:dim(Spectrum_df)[2], 
                              alt.sym = letters[1:dim(Spectrum_df)[2]], 
                              unit = c("a.u.", "Domain"), 
                              desc = "Some signal. Describe it with 'desc'"){
  features <- c("freq", "data", "names", "groups", "colors", "sym", "alt.sym", "unit", "desc")
  Spectrum_chem <- vector("list", length(features))
  names(Spectrum_chem) <- features

  Spectrum_chem$freq <- freq
  Spectrum_chem$data <- data
  Spectrum_chem$names <- names
  Spectrum_chem$groups <- groups
  Spectrum_chem$colors <- colors
  Spectrum_chem$sym <- sym
  Spectrum_chem$alt.sym <- alt.sym
  Spectrum_chem$unit <- unit
  Spectrum_chem$desc <- desc

  # important step
  class(Spectrum_chem) <- "Spectra"

  # some warnings
  if (length(freq)!=dim(data)[2]) print("Dimension of data is NOT #samples X length of freq")

  if (length(names)>dim(data)[1]) print("Too many names")
  if (length(names)<dim(data)[1]) print("Too less names")

  if (length(groups)>dim(data)[1]) print("Too many groups")
  if (length(groups)<dim(data)[1]) print("Too less groups")

  if (length(colors)>dim(data)[1]) print("Too many colors")
  if (length(colors)<dim(data)[1]) print("Too less colors")

  if (is.matrix(data)==F) print("'data' is not a matrix or it's not numeric")

  return(Spectrum_chem)
}
Spectrum_chem <- dataframe2Spectra(Spectrum)
chkSpectra(Spectrum_chem)