Построение подмножества данных из матрицы prcomp без повторного запуска prcomp - PullRequest
0 голосов
/ 03 сентября 2018

Я задаю вопрос к аналогичному сообщению, опубликованному 2 года назад, без полного ответа на него ( подмножество объекта prcomp в R ). Постскриптум извините за комментарий для ответа ..

По сути, мой вопрос такой же. Я сгенерировал таблицу PCA, используя prcomp с 10000+ генами и 1700+ клетками, состоящими из 7 временных точек. Построение их всех в одном файле затрудняет просмотр.

Я хотел бы построить каждый момент времени отдельно, используя одну и ту же таблицу результатов PCA (т.е. без повторного запуска prcomp).

Спасибо, Дин, за то, что дал мне советы по публикации. Чтобы придумать, как описать мой набор данных, не загружая его здесь, мне понадобится неделя. Я также попробовал

dput(droplevels(head(object,2))) 

, но это было слишком много информации, так как у меня такой большой набор данных. Короче говоря, это большая матрица набора данных из одной ячейки, где люди обычно могут видеть такие пакеты, как Seurat (https://satijalab.org/seurat/pbmc3k_tutorial_1_4.html). РЕДАКТИРОВАТЬ: я разместил здесь скриншот подмножества моей матрицы (enter image description here).

Извините, я не знаю, как воссоздать это или даже экспортировать текстовый формат ... Но вот что я могу предоставить: Моя матрица TPM содержит 16541 ряд (определяющих гены) и 1798 столбцов (определяющих ячейки).

В нем я «переименовал» свои столбцы на основе временных точек, используя такие коды, как:

D0<-c(colnames(TPM[,grep("20180419-24837-1-*", colnames(TPM))])) #D0: 286 cells

D7<-c(colnames(TPM[,grep("20180419-24837-2-*", colnames(TPM))])) #D7: 237 cells

D10<-c(colnames(TPM[,grep("20180419-24947-5-*", colnames(TPM))])) #D10: 304 cells

...... и я продолжал маркировать каждый момент времени.

Каждому моменту времени также был придан определенный цвет.

rc<-rep("white", ncol(TPM))

rc<-[,grep("20180419-24837-1-*", colnames(TPM))]= "magenta"

...... и я продолжал придавать цвет каждому моменту времени.

Я выполнил PCA, используя этот код:

pcaRes<-prcomp(t(log(TPM+1)), center= TRUE, scale. = TRUE)

Затем я приступил к построению графика PCA, используя:

 plot(pcaRes$x[,1], pcaRes$x[,2], xlab="PC1", ylab="PC2",
 cex=1.0, col= rc, pch=16, main="")

Тогда я, когда хотел построить график PCA только с D0, используя тот же выход PCA (pcaRes). Вот где я застрял.

P.S. Если у кого-то есть более простой способ посоветовать, как ввести пример данных из моей большой матрицы, я буду рад любой помощи. Спасибо! Извините, я очень новичок в биоинформатике.

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

спасибо @ConradThiele за ваше предложение, я проверю этот сайт.

Я поболтал с другой биоинформатикой в ​​институте. Мой запрос имеет мало общего с тем, что объект является классом S4, так как я выполняю prcomp вне пакета. Я извлек свою матрицу из объекта, а затем запустил на нем prcomp.

Решение простое: запустите prcomp с полным набором данных, преобразуйте выходные данные prcomp в кадр данных, введите дополнительные столбцы для ввода дополнительных деталей, таких как «timepoint», создайте новый data-frame (s) только с «timepoint» / «variable» из Если вы заинтересованы в результате prcomp, создайте несколько подкадров, а затем нанесите их на график, используя «plot» или любую другую функцию, которую вы используете.

Это было не мое решение, но из биоинформации я обратился за помощью в свой институт. Надеюсь, что это помогает другим! Еще раз спасибо за ваше время.

P.S. Если у меня будет время, я скоро опубликую копию предложенного мной кода.

0 голосов
/ 04 сентября 2018

Обмен стека на Биоинформатика - это то место, куда вам нужно обратиться, чтобы задать вопрос (-ы) или узнать о пакете (-ах) и функциях, которые вам нужны для работы в вашей области специализации. Stack Exchange для биоинформатики связан с Stackoverflow , поэтому вам просто нужно присоединиться, у вас будет тот же логин.

Классы S3, S4 и Base.

Это очень простой взгляд на классы в R. Думайте о классе как о родителе, от которого вы наследуете все свои навыки или способности, и в результате вы сможете выполнять определенные задачи лучше, чем другие, а в некоторых случаях вы не сможете быть в состоянии сделать задачу на всех.

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

Базовый и S3 классы хорошо работают вместе, они как люди из рабочего класса в мире R. S4 - это специализированный класс, созданный для конкретных областей обучения, чтобы иметь возможность предоставлять конкретные функции, необходимые в их отрасли. Это означает, что вы можете использовать только определенные функции Base и S3 с функциями класса S4, большинство из них просто несовместимы. Так что вы ничего не сделали неправильно, у plot () и ggplot () просто есть неправильные родители для работы с вашим набором данных.

Типичный кадр данных базового класса и класса S3 : структура в виде коробки. Вдоль левой стороны расположены названия колонок, аккуратно сложенные друг на друге.

Typical Base and S3 Class data frame

Кадр данных Seurat S4 Class : Древовидная структура, отформатированная для чтения определенной функцией (ями).

enter image description here

Хорошо, надеюсь, это поможет, и я желаю вам всего наилучшего в вашей карьере. Ура Конрад

Ps, если это поможет, тогда нажмите стрелку вверх. :)

...