入力ファイルは次のようになります。
1-1_サンプル1 GCCCATGGCT 2-1_サンプル1 GAGTGTATGT 3-1_サンプル1 TGTTCTATCT 1-1_サンプル2 GCTTAGCCAT 2-1_サンプル2 TGTAGTCAGT 3-1_サンプル2 GGGAACCAAG 1-1_サンプル3 TGGAAGCGGT 2-1_サンプル3 CGGGAGGAGAGA3
#include <cstdlib>
#include <iostream>
#include <string>
#include <fstream>
#include <stdlib.h>
using namespace std;
const int pops = 10;
const int sequence = 100;
string w;
string popname;
string lastpop;
int totalpops;
string ind;
int i;
int j;
char c;
float dna[pops][4][sequence];
float Af[1][1][1];
int main(int argc, char *argv[])
{
ifstream fin0("dnatest.txt");
lastpop = "nonsense";
totalpops = -1;
if (fin0)
{
do
{
getline(fin0, w);
cout << w<<endl;
i=0;
ind = "";
popname = "";
do {c = w [i];
i++;
if ((c != '>')&(c!='-')) ind=ind+c; } while (c != '-');
do {c = w [i];
i++; } while (c != ' ');
do {c = w [i];
i++;
if (c!= '\n') popname=popname+c; } while (i< w.length());
if (popname != lastpop) { totalpops++;
lastpop=popname;
}
getline (fin0, w);
cout << w<<endl << w.length()<<endl;
for (i=0; i<w.length(); i++)
{if (w[i]=='A') dna[totalpops][0][i]++;
if (w[i]=='C') dna[totalpops][1][i]++;
if (w[i]=='G') dna[totalpops][2][i]++;
if (w[i]=='T') dna[totalpops][3][i]++;
}
for(int k=0;k<1;k++)
{for(int j=0; j<1;j++)
{for (int i=0;i<1;i++)
Af[0] = Af[0][0][0]+dna[i][j][k]; //RETURNS THE ERROR "INCOMPATIBLE TYPES IN ASSIGNMENT OF 'FLOAT' TO 'FLOAT[1][1]'
cout<<Af<<endl;}
}
while (!fin0.eof());
}
system("PAUSE");
return EXIT_SUCCESS;
}
背景: 私は C++ に非常に慣れていないため、大学院での研究を補うために C++ を使用する方法を独学で学ぼうとしています。私は遺伝学の博士号候補で、さまざまな進化の歴史をモデル化し、それらが集団全体の対立遺伝子の頻度にどのように影響するかを研究しています。
質問: 入力ファイルから作成した「dna」配列からデータの特定の部分を抽出しようとしています。たとえば、ここでは別の配列 "Af" を作成しました。そこでは、いわば dna 配列の最初の "セル" のカウントを抽出しようとしています。これを行う目的は、特定の細胞グループのカウントを DNA アレイ全体と比較して頻度を計算できるようにすることです。これを行う方法がわかりません。「「FLOAT[1][1]」への「FLOAT」の割り当てに互換性のないタイプがあります」
さまざまなフォーラムでこれを調査するのに多くの時間を費やしましたが、このエラーが何を意味するのか、達成しようとしていることを達成する方法を理解できないようです。
したがって、私が視覚化している DNA 配列は、4 つの行 (A、C、G、T) があるように入力ファイルから作成されます。次に 10 列 (一連のヌクレオチドごとに 1 列)。次に、この「グリッド」が 3 回スタックされます (入力ファイルにリストされているように、サンプルごとに 1 つの「シート」(ここでのサンプルは母集団を意味し、母集団ごとに 3 人の個体が存在します))。したがって、このグリッドのスタックから、たとえば、最初のセル (サンプル 1 の位置 1 の A の数) を抽出したいと考えています。次に、この数をすべてのサンプルの位置 1 の A の総数と比較します。この頻度は、テストしているモデルにとって意味のある数値になります。
問題は、dna配列の一部を抽出する方法がわからないことです.この要約された例を理解したら、非常に大きな入力ファイルに適用し、一度に複数のセルを抽出したいと思うでしょう.