Преобразовать матричный текстовый файл в данные спектров для пакета ChemoSpec - PullRequest
0 голосов
/ 01 июля 2011

Я хочу использовать ChemoSpec с масс-спектрами около 60 000 точек данных.

У меня они уже есть в одном текстовом файле в виде матрицы (X + 90 отсчетов = 91 столбец; 60 000 строк).

Как я могу адаптировать этот файл в качестве данных спектров без повторного экспорта каждого отдельного файла в формате csv (который довольно длинный в R, учитывая размер моих данных)?

Ответы [ 3 ]

0 голосов
/ 04 июля 2011

Извините, я пропустил ваш вопрос 2 дня назад.Я автор ChemoSpec - всегда не стесняйтесь писать мне прямо в дополнение к публикации где-либо.

Решение простое.У вас уже есть данные в матрице (после того, как вы прочитали их с помощью >read.csv("file.txt"). Таким образом, вы можете использовать их для создания объекта Spectra вручную. В консоли R введите ?Spectra, чтобы увидеть структуру объекта Spectra,Это список с конкретными записями. Вам нужно будет поместить ваш столбец X (который я предполагаю, что это масса) в слот freq. Затем оставшаяся часть матрицы данных перейдет в слот данных. Затем вручную создайте другие необходимые записи (убедитесь, что типы данных правильные.) Наконец, присвойте класс Spectra вашему завершенному списку, выполнив что-то вроде >class(my.spectra) <- «Spectra», и вы должны быть в порядке.Вы описываете свои данные более подробно. Возможно, вы уже решили проблему? </p>

Кстати, ChemoSpec полностью не проверено с данными MS, но я бы хотел узнать, как это работает для васМогут быть некоторые изменения, которые будут полезны, поэтому я надеюсь, что вы отправите мне отзыв.

Удачи, и дайте мне знать, как еще я могу помочь.

0 голосов
/ 06 июля 2018

прошло много лет, и я не уверен, что кто-то еще заинтересован в этой теме.Но у меня была та же проблема, и я сделал небольшой обходной путь для преобразования моих данных в класс «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)
0 голосов
/ 01 июля 2011

Типичным (и единственным?) Способом импорта данных в ChemoSpec является функция getManyCsv () , которая, как показывает вопрос, требует один файл CSV для каждого образца .

Создание 90 CSV-файлов из 91 столбца - описанный файл с 60000 строк может быть несколько медленным и утомительным в R, но может быть выполнено с помощью отдельного приложения, будь то существующая утилита или какой-то специальный скрипт.

Решением только для R было бы создать новый метод, скажем getOneBigCsv () , адаптированный из getManyCsv () . В конце концов, логика getManyCsv () относительно проста.
Не ожидайте, что такое решение будет быстро запущено, но в любом случае оно должно сравниваться со временем, которое требуется для запуска getManyCsv (), и избегать необходимости создавать и управлять множеством файлов, следовательно, в целом будет быстрее и, конечно, менее грязно .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...