我想使用质谱约为60'000数据点的ChemoSpec。
我已经将它们作为矩阵存储在一个txt文件中(X + 90个样本= 91列;60'000行)。
如何将此文件调整为光谱数据,而无需再次将每个文件导出为csv格式(考虑到数据的大小,该格式在R中相当长)?
发布于 2011-07-02 00:07:52
典型的(也是唯一的?)将数据导入ChemoSpec的方法是通过getManyCsv()函数,正如问题所示,该函数需要为每个样本使用一个CSV文件。
从所描述的91列- 60,000行文件创建90个CSV文件,在R中可能有点慢和乏味,但可以使用独立的应用程序来完成,无论是现有的实用程序还是一些特别的脚本。
一个R-only的解决方案是创建一个新的方法,比如 getOneBigCsv(),改编自 getManyCsv()。毕竟,the logic of getManyCsv()是相对简单的。
不要期望这样的解决方案会很快,但在任何情况下,它都应该与运行getManyCsv()所需的时间相比较,并避免创建和管理许多文件,因此总体上会更快,当然也不会那么凌乱。
发布于 2011-07-04 05:31:22
对不起,2天前我错过了你的问题。我是ChemoSpec的作者-除了在某个地方发帖外,请随时直接给我写信。
解决方案很简单。您已经将数据放入矩阵中(在使用>read.csv("file.txt")读取数据之后)。因此您可以使用它手动创建一个Spectra对象。在R控制台中,输入?Spectra查看频谱对象的结构,这是一个包含特定条目的列表。您需要将X列(我假设它是mass)放入freq槽中。然后,数据矩阵的其余部分将进入数据槽。然后手动创建其他所需的条目(确保数据类型正确)。最后,通过像>class(my.spectra) <- " Spectra“这样的操作将Spectra类分配到您完成的列表中,您就应该可以开始工作了。如果你能更完整地描述你的数据,我可以给你列表上或列表外的更多细节。也许你已经解决了这个问题?
顺便说一句,ChemoSpec完全没有经过MS data的测试,但我很想知道它是如何为您工作的。可能会有一些变化是有帮助的,所以我希望你能给我反馈。
祝你好运,让我知道我还能帮上什么忙。
发布于 2018-07-06 17:49:05
许多年过去了,我不确定是否还有人对这个话题感兴趣。但我也遇到了同样的问题,我做了一个小的变通办法,通过从数据本身中提取信息,将我的数据转换为类“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)https://stackoverflow.com/questions/6549343
复制相似问题