我想使用质量约为60'000 datapoint的ChemoSpec。
我已将它们作为矩阵放在一个txt文件中(X + 90个样本= 91列; 60'000行)。
我如何将此文件作为光谱数据进行调整,而不再以csv格式再次导出每个文件(考虑到我的数据大小,这在R中相当长)?
答案 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)