Как объединить данные, сгенерированные в цикле for, в единую точечную диаграмму?

#r #for-loop #scatter-plot

Вопрос:

У меня есть этот код, который вычисляет значения p для определенных именованных маркеров в файле (объекте gts ). Цикл for создает точечные диаграммы для каждого trait , определенного в pts .

Точечная диаграмма из цикла

 pts lt;- read.csv('data_rqtl_phenotypes.csv',as.is=T) gts lt;- read.csv('data_rqtl_genotypes.csv',as.is=T) gts lt;- gts[,c(1,grep('2B',gts[1,]))]### use only 1B gts lt;- gts[,!apply(gts[2,],1,duplicated)]### remove duplicated dim(gts)### 93 229 map lt;- gts[1:2,]### salvage map gts lt;- gts[-c(1:2),] gts[gts=='-'] lt;- NA testdfr lt;- merge(pts,gts,by='id') testdfr[1:5,1:10]  pdf('SingleMarkerAnalysis_ParW471_2021_10_21.pdf') for( trait in colnames(pts)[-1]) {  print(trait) pValueL lt;- c() for(marker in colnames(gts)) {  model lt;- try(lm(testdfr[,trait]~testdfr[,marker]))  {  if(any("try-error"%in%class(model)))  print('not enough data for a test')  else  {  modelsum lt;- summary(model)  coeffs lt;- modelsum$coefficient  print(coeffs)  pValue=coeffs[grep('[AB]

Тем не менее, я хочу взять данные, полученные на каждой итерации, а затем нанести их на одну и ту же точечную диаграмму, чтобы я мог раскрасить каждую из них и посмотреть, как они сравниваются друг с другом. Я не уверен, как заставить цикл выводить каждую итерацию на новый объект, чтобы их можно было построить вместе. если кто-нибудь знает, как это можно сделать, был бы очень признателен!


Комментарии:

1. После выполнения цикла вы получаете pValueL объект со всеми значениями из каждой итерации? Затем вы можете использовать points() функцию для добавления каждого набора значений к исходному графику.

2. Ах, спасибо, это помогло. Таким образом, pValueL хранит данные только с одной итерации, а затем заменяется после каждой итерации. Мне удалось создать диаграмму рассеяния, в которой я нуждался, вручную определив "признак" и запустив только второй цикл for для связанных маркеров из " для " (маркер в именах столбцов... и т. Д.", а затем добавление через точки. Я думаю, что если я включу функцию points() в полный цикл, я смогу получить нужный мне сюжет без необходимости делать что-то вручную

,row.names(coeffs)),grep('Pr',colnames(coeffs))] print(pValue) if(length(pValue)gt;0) pValueL[marker] lt;- pValue } } } plot.default(map[2,names(pValueL)],-sapply(pValueL,log10),main=trait,xlab='Chr 1B [cM]', ylab='-log10(pValue)',ylim=c(0,7)) } dev.off() Тем не менее, я хочу взять данные, полученные на каждой итерации, а затем нанести их на одну и ту же точечную диаграмму, чтобы я мог раскрасить каждую из них и посмотреть, как они сравниваются друг с другом. Я не уверен, как заставить цикл выводить каждую итерацию на новый объект, чтобы их можно было построить вместе. если кто-нибудь знает, как это можно сделать, был бы очень признателен!

Комментарии:

1. После выполнения цикла вы получаете pValueL объект со всеми значениями из каждой итерации? Затем вы можете использовать points() функцию для добавления каждого набора значений к исходному графику.

2. Ах, спасибо, это помогло. Таким образом, pValueL хранит данные только с одной итерации, а затем заменяется после каждой итерации. Мне удалось создать диаграмму рассеяния, в которой я нуждался, вручную определив «признак» и запустив только второй цикл for для связанных маркеров из » для » (маркер в именах столбцов… и т. Д.», а затем добавление через точки. Я думаю, что если я включу функцию points() в полный цикл, я смогу получить нужный мне сюжет без необходимости делать что-то вручную