Как установить filter.fn (параметр read.matrix в R), чтобы он очищал имена строк и столбцов, чтобы они содержали только буквы, плюс da sh и точечные символы - PullRequest
0 голосов
/ 25 апреля 2020

Я легкий, когда дело доходит до R, и я пытаюсь использовать пакет под названием Seurat. Я узнал, что с помощью read.matrix можно читать не матричные данные с 10x разреженными рыночными данными (файлы .mtx) и что имена строк и столбцов можно загружать из связанных csv-файлов. Однако в именах строк и столбцов должны быть удалены определенные c символы (все, что не является alphanumeri c, dot или da sh). Я хотел бы заменить «плохие персонажи» тире. И я хотел бы сделать это в R, чтобы я мог сохранить дисковое пространство, занимаемое моими результатами, маленьким.

Я смотрел на справку read.matrix do c, и, похоже, вы можете установить параметр с именем filter.fn (который, как я понимаю, является функцией, хотя это явно не указано), чтобы «очистить» имена строк и столбцов.

Я узнал, как создать функцию, и получил ее принять row.ids и col.ids в качестве аргументов. Я узнал, как использовать классы символов, чтобы делать замены в строках, содержащихся там (и мои тесты показывают, что он делает то, что я хочу). Но так как функции возвращают только 1 значение или набор, я не уверен, что возвращать. Я попытался вернуть c(row.ids, col.ids), но это создает одномерный набор. Даже если я пойму, как вернуть набор 2D, я не уверен, что это то, что нужно. Я пытался увидеть, сохраняются ли изменения в представленных переменных, но это не так. И я не знаю, что искать, чтобы решить эту проблему.

Вот что у меня так далеко:

coldata <- read.csv(file="cell_metadata.csv", header=TRUE, sep=",")
colnames <- paste(coldata$cell_barcode)
rowdata <- read.csv(file="genes.csv", header=TRUE, sep=",")
rownames <- paste(rowdata$genome, rowdata$gene_id, rowdata$gene_name, sep = ".")

cleanrowscols <- function(row.ids, col.ids) {
  row.ids <- gsub("[^[:alnum:\\\\-\\\\.] ]", "-", row.ids)
  col.ids <- gsub("[^[:alnum:\\\\-\\\\.] ]", "-", col.ids)
  return(1)
}

read.matrix("DGE.mtx", header = TRUE, skip = 1, row.ids = rownames,
  col.ids = colnames, colClasses = c("numeric", "numeric", "numeric"),
  assign.fn = assign_matrix_dense, filter.fn = cleanrowscols)

Но что нужно вернуть cleanrowscols, чтобы заставить его убрать имена строк и столбцов, переданные в read.matrix?

ОБНОВЛЕНИЕ : Тьфу, R даже не знает, что такое read.matrix, и я не знаю, как его импортировать. Так что, возможно, другой курс. Я обнаружил, что library("Matrix") имеет readMM(file), поэтому я попытался readMM("DGE.mtx"), и это, кажется, работает. Как установить имена строк и столбцов?

1 Ответ

0 голосов
/ 25 апреля 2020

OK. Я думаю, я понял это.

coldata <- read.csv(file="cell_metadata.csv", header=TRUE, sep=",")
colnames <- gsub("[^[:alnum:\\\\-\\\\.] ]", "-", paste(coldata$cell_barcode))

rowdata <- read.csv(file="genes.csv", header=TRUE, sep=",")
rownames <- gsub("[^[:alnum:\\\\-\\\\.] ]", "-", paste(rowdata$genome, rowdata$gene_id, rowdata$gene_name, sep = "."))

library("Matrix")
mtx <- t(as.matrix(readMM("DGE.mtx")))
rownames(mtx) <- rownames
colnames(mtx) <- colnames

Хотя, я уверен, что есть лучший, более эффективный ответ. Обратите внимание, я должен был транспонировать, потому что seurate ожидает гены в виде строк, а клетки в виде столбцов. Я объединил некоторые данные для имен строк. На самом деле, мне нужно выяснить еще одну вещь, но это выходит за рамки этого вопроса. (Мне нужно добавить хромосому к именам строк, но ее нет в файле genes.csv ...)

...