Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++不相容类型:计算等位基因频率_C++_Arrays_Multidimensional Array_Genetic_Dna Sequence - Fatal编程技术网

C++不相容类型:计算等位基因频率

C++不相容类型:计算等位基因频率,c++,arrays,multidimensional-array,genetic,dna-sequence,C++,Arrays,Multidimensional Array,Genetic,Dna Sequence,以下是输入文件的外观: 1-1_样本1 GCCCATGGCT 2-1_样本1 gagtgtagt 3-1_样本1 TGTTCTATCT 1-1_样本2 GCTTAGCCAT 2-1_样本2 TGTAGTCAGT 3-1_样本2 gggaacaag 1-1_样本3 TGGAAGCGT 2-1_样本3 CGGGAGGA 3-1_样本3 CTTCAGTTT 背景: 我对C++非常陌生,并试图教自己用它来补充我的研究生研究。我是遗传学博士研究生,试图模拟不同的进化历史,以及它们如何影响群体中等位基因的频

以下是输入文件的外观:

1-1_样本1 GCCCATGGCT 2-1_样本1 gagtgtagt 3-1_样本1 TGTTCTATCT 1-1_样本2 GCTTAGCCAT 2-1_样本2 TGTAGTCAGT 3-1_样本2 gggaacaag 1-1_样本3 TGGAAGCGT 2-1_样本3 CGGGAGGA 3-1_样本3 CTTCAGTTT

背景: 我对C++非常陌生,并试图教自己用它来补充我的研究生研究。我是遗传学博士研究生,试图模拟不同的进化历史,以及它们如何影响群体中等位基因的频率

问题: 我试图从我从输入文件创建的dna数组中提取数据的某些部分。 例如,我在这里创建了另一个数组Af,我试图提取dna数组中第一个细胞的计数。这样做的目的是,我可以通过比较特定细胞组的计数和整个dna阵列来计算频率。我不知道该怎么做。我一直收到错误消息:“FLOAT”赋值为“FLOAT[1][1]时类型不兼容”

我花了很多时间在不同的论坛上研究这个问题,但我似乎无法理解这个错误的含义,以及如何实现我想要实现的目标

因此,我正在可视化的dna数组是由输入文件生成的,这样就有4行a,C,G,T,然后10列,一列代表序列中的每个核苷酸。然后,每个样本将此网格堆叠3次,每个样本一张,此处样本表示总体,每个总体有三个个体,如输入文件中所列。 所以我想从这个网格堆栈中提取,例如,第一个单元格,样本1中位置1处A的数量。然后,我想将这个数字与所有样本中位置1处A的总数进行比较。这个频率对于我正在测试的模型来说是一个有意义的数字

问题是,我不知道如何提取dna阵列的部分-一旦我找到了这个浓缩的示例,我将把它应用到非常大的输入文件中,并且希望一次提取多个细胞。

Af是一个三维阵列:

float Af[1][1][1];
但是,它只包含一个元素。它有一行、一列和一层,或者以您想要的方式命名第三维。这使它有点毫无意义。你最好有这个:

float Af;
尽管如此,你没有这个——你有一个3D阵列。现在让我们看看这一行:

Af[0] = Af[0][0][0] + dna[i][j][k];
首先它从Af中取第0,0,0个元素,正如我们刚才看到的,它是A中唯一的元素,并将来自dna的i,j,jth元素添加到其中。该位很好,因为这两个元素都是float类型。即:

Af[0] = Af[0][0][0] + dna[i][j][k];
//      ^^^^^^^^^^^   ^^^^^^^^^^^^
//        These are both floats
所以这个加法的结果也是一个浮点数。那么你想把这个结果分配给什么呢?你试着把它赋给Af[0],但那不是一个浮点。您已经在第一个维度中指定了第0个索引。还有两个维度需要指定。Af[0]的类型实际上是一个浮点[1][1]一个二维浮点数组。这将起作用,例如:

Af[0][0][0] = Af[0][0][0] + dna[i][j][k];
// Or equivalently:
Af[0][0][0] += dna[i][j][k];
这是不是你想做的完全取决于这个问题,我无法理解。然而,正如我所说的,将Af作为一个只有一个元素的三维数组是毫无意义的。如果它只是一个浮点数,则将其设置为浮点数,而不是数组。然后,您将按照以下步骤执行上述操作:

Af += dna[i][j][k];

浮动Af[1][1][1];-为什么你有一个只有一个元素的三维数组?而且,你希望这个赋值做什么?Af[0]=Af[0][0][0]+dna[i][j][k];将两个值相加,并将它们赋给二维数组。你的意图是什么?在开始编写代码之前,你应该先读一本书。@Rabbit,我想用Af数组包含DNA数组的一部分,这样我就可以计算数据不同部分的等位基因分布。我打算定义要添加到Af[0][0][0]数组中的DNA数组的不同范围,以便进行不同的分析。目前,DNA阵列保存了我所有的数据。我希望能够将该数据子集,然后将其与完整的数据集进行比较。我真的只是在问为什么我会收到这样的错误信息。我不明白在这种情况下,不兼容类型错误意味着什么。
Af += dna[i][j][k];