这是输入文件的样子:
1-1_Sample 1 GCCCATGGCT 2-1_Sample 1 GAGTGTATGT 3-1_Sample 1 TGTTCTATCT 1-1_Sample 2 GCTTAGCCAT 2-1_Sample 2 TGTAGTCAGT 3-1_Sample 2 GGGAACCAAG 1-1_Sample 3 TGGAAGCGGT 2-1_Sample 3 CGGGAGGAG
#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++ 非常陌生,并试图自学用它来补充我的研究生研究。我是遗传学博士候选人,试图模拟不同的进化历史,以及它们如何影响人群中等位基因的频率。
问题:我正在尝试从我从输入文件创建的“dna”数组中提取某些数据部分。例如,在这里我创建了另一个数组“Af”,我试图在其中提取 dna 数组的第一个“细胞”的计数。这样做的目的是让我可以通过将某些细胞组中的计数与整个 dna 阵列中的计数进行比较来计算频率。我不知道该怎么做。我不断收到错误消息:“将'FLOAT'分配给'FLOAT [1] [1]'的类型不兼容”
我花了很多时间在不同的论坛上研究这个,但我似乎无法理解这个错误意味着什么,以及如何实现我想要实现的目标。
所以我正在可视化的 dna 数组是由输入文件制成的,因此有 4 行(A、C、G、T)。然后是 10 列(系列中的每个核苷酸一列)。然后将该“网格”堆叠 3 次(输入文件中列出的每个样本(这里样本表示总体,每个总体有 3 个个体)一个“表”)。因此,我想从这堆网格中提取,例如,第一个单元格(样本 1 中位置 1 的 A 数。然后我想将此数字与所有样本中位置 1 的 A 总数进行比较。对于我正在测试的模型,这个频率将是一个有意义的数字。
问题是,我不知道如何提取 dna 数组的一部分——一旦我弄清楚这个精简的例子,我将把它应用到非常大的输入文件中,并且一次要提取多个单元格。