Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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
R 加快嵌套循环的速度_R_Loops_For Loop_Apply - Fatal编程技术网

R 加快嵌套循环的速度

R 加快嵌套循环的速度,r,loops,for-loop,apply,R,Loops,For Loop,Apply,我试图将多个数据帧中的信息组合起来,以填充一个大数据帧。第一个数据框类似于对所有人类基因的概述: gene_id chromosome gene_start gene_end ENSG00000116396 1 110753965 110825722 ENSG00000228217 1 118320709 118321128 ENSG00000261716 1 149816065 149820591 ENSG00000223562 1 211355498 21

我试图将多个数据帧中的信息组合起来,以填充一个大数据帧。第一个数据框类似于对所有人类基因的概述:

gene_id chromosome  gene_start  gene_end
ENSG00000116396 1   110753965   110825722
ENSG00000228217 1   118320709   118321128
ENSG00000261716 1   149816065   149820591
ENSG00000223562 1   211355498   211356446
ENSG00000239859 1   36171626    36171875
ENSG00000197921 1   2460184     2461684
ENSG00000232237 1   201083081   201096312
ENSG00000212257 1   65488651    65488757
ENSG00000158887 1   161274525   161279762
ENSG00000238122 1   108803818   108816311
ENSG00000215846 1   159246293   159247282
ENSG00000266763 1   26238240    26238313
ENSG00000228634 1   32398621    32399576
ENSG00000177614 1   230457392   230561475
ENSG00000163462 1   155145873   155157447
ENSG00000204481 1   13668269    13673511
其次,我有许多文件(516个),其中包含如下数据:

Sample  Chromosome  Start   End Num_Probes  Segment_Mean
UNDID_p_TCGA_353_354_355_37_NSP_GenomeWideSNP_6_H10_1376930 1   61735   82170           9       0.2560
UNDID_p_TCGA_353_354_355_37_NSP_GenomeWideSNP_6_H10_1376930 1   82315   16869363        8678    -0.1199
UNDID_p_TCGA_353_354_355_37_NSP_GenomeWideSNP_6_H10_1376930 1   16871278    17087292    85      -0.5386
UNDID_p_TCGA_353_354_355_37_NSP_GenomeWideSNP_6_H10_1376930 1   17089349    17209603    23      -0.0807
UNDID_p_TCGA_353_354_355_37_NSP_GenomeWideSNP_6_H10_1376930 1   17210652    17262232    57      0.2680
UNDID_p_TCGA_353_354_355_37_NSP_GenomeWideSNP_6_H10_1376930 1   17262247    25583341    5240    -0.1228
UNDID_p_TCGA_353_354_355_37_NSP_GenomeWideSNP_6_H10_1376930 1   25593128    25646986    28      -1.8216
UNDID_p_TCGA_353_354_355_37_NSP_GenomeWideSNP_6_H10_1376930 1   25661501    30738534    2398    -0.0942
UNDID_p_TCGA_353_354_355_37_NSP_GenomeWideSNP_6_H10_1376930 1   30739299    30745210    7       -1.3117
现在,我想创建一些循环,在第一个数据帧中获取每个基因。然后我想在检查基因位置的同时遍历所有516个数据帧

所以对于每个基因和每个文件,我想比较基因的开始和结束与每个样本片段的开始和结束,前提是它们在同一条染色体上。如果是这样的话,我想把段的意思放在一个新的大数据框中,用gene_id作为行名,文件名作为列名

这是我已有的代码:

for(gene in 1:100){
  gene_id    <- genome[gene, 1]
  chromosome <- genome[gene, 2]
  gene_start <- genome[gene, 3]
  gene_end   <- genome[gene, 4]

  for(name in 1:length(dataframe_names)){
    df <- get(dataframe_names[name])
    for(segment in 1:nrow(df)){
      if(chromosome == as.character(df[segment,2])){
        if(gene_start > df[segment,3] && gene_start < df[segment,4] && gene_end > df[segment,3] && gene_end < df[segment,4]){
          data_matrix[gene,name] <- df[segment, 6]
        }
      }
    }
  }
}
for(基因比例为1:100){

gene_id你需要做的第一件事就是停止重新发明轮子。熟悉bioconductor软件包
IRanges
GenomicRanges
(和
Biostrings
,以确保完整性,尽管不是为了这个特定的问题)。一旦你获得了GenomicRanges,请查看FindVerlaps函数家族

因为您的示例数据实际上没有任何重叠,所以我对其进行了这样的修改

df1 <- structure(list(gene_id = structure(c(2L, 5L, 1L, 3L, 7L, 6L, 
   4L), .Label = c("ENSG00000207157", "ENSG00000223116", "ENSG00000229483", 
   "ENSG00000232849", "ENSG00000233440", "ENSG00000235205", "ENSG00000252952"
   ), class = "factor"), chromosome = c(13L, 13L, 13L, 13L, 13L, 
   13L, 13L), gene_start = c(23551994L, 23708313L, 23726725L, 23743974L, 
   23791571L, 23817659L, 93708910L), gene_end = c(23552136L, 23708703L, 
   23726825L, 23744736L, 23791673L, 23821323L, 93710179L)), .Names = c("gene_id", 
   "chromosome", "gene_start", "gene_end"), class = "data.frame", row.names = c(NA, 
   -7L))
 df2 <- structure(list(Sample = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
  1L, 1L), .Label = "UNDID_p_TCGA_353_354_355_37_NSP_GenomeWideSNP_6_H10_1376930", class = "factor"), 
Chromosome = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), Start = c(61735L, 
82315L, 16871278L, 17089349L, 17210652L, 17262247L, 25593128L, 
25661501L, 30739299L), End = c(82170L, 16869363L, 17087292L, 
17209603L, 17262232L, 25583341L, 25646986L, 30738534L, 30745210L
), Num_Probes = c(9L, 8678L, 85L, 23L, 57L, 5240L, 28L, 2398L, 
7L), Segment_Mean = c(0.256, -0.1199, -0.5386, -0.0807, 0.268, 
-0.1228, -1.8216, -0.0942, -1.3117)), .Names = c("Sample", 
"Chromosome", "Start", "End", "Num_Probes", "Segment_Mean"), class = "data.frame", row.names = c(NA, 
-9L))
df1$chromosome <- 1
df1[6,4] <- 30745215 # to show what happens when there are multiple overlaps

df1你需要做的第一件事就是停止重新发明轮子。熟悉bioconductor软件包
IRanges
genomarranges
(和
Biostrings
,以确保完整性,尽管不是为了这个特殊的问题)。一旦你获得了Genomarranges,请查看FindVerlaps函数家族

因为您的示例数据实际上没有任何重叠,所以我对其进行了这样的修改

df1 <- structure(list(gene_id = structure(c(2L, 5L, 1L, 3L, 7L, 6L, 
   4L), .Label = c("ENSG00000207157", "ENSG00000223116", "ENSG00000229483", 
   "ENSG00000232849", "ENSG00000233440", "ENSG00000235205", "ENSG00000252952"
   ), class = "factor"), chromosome = c(13L, 13L, 13L, 13L, 13L, 
   13L, 13L), gene_start = c(23551994L, 23708313L, 23726725L, 23743974L, 
   23791571L, 23817659L, 93708910L), gene_end = c(23552136L, 23708703L, 
   23726825L, 23744736L, 23791673L, 23821323L, 93710179L)), .Names = c("gene_id", 
   "chromosome", "gene_start", "gene_end"), class = "data.frame", row.names = c(NA, 
   -7L))
 df2 <- structure(list(Sample = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
  1L, 1L), .Label = "UNDID_p_TCGA_353_354_355_37_NSP_GenomeWideSNP_6_H10_1376930", class = "factor"), 
Chromosome = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), Start = c(61735L, 
82315L, 16871278L, 17089349L, 17210652L, 17262247L, 25593128L, 
25661501L, 30739299L), End = c(82170L, 16869363L, 17087292L, 
17209603L, 17262232L, 25583341L, 25646986L, 30738534L, 30745210L
), Num_Probes = c(9L, 8678L, 85L, 23L, 57L, 5240L, 28L, 2398L, 
7L), Segment_Mean = c(0.256, -0.1199, -0.5386, -0.0807, 0.268, 
-0.1228, -1.8216, -0.0942, -1.3117)), .Names = c("Sample", 
"Chromosome", "Start", "End", "Num_Probes", "Segment_Mean"), class = "data.frame", row.names = c(NA, 
-9L))
df1$chromosome <- 1
df1[6,4] <- 30745215 # to show what happens when there are multiple overlaps

df1你需要做的第一件事就是停止重新发明轮子。熟悉bioconductor软件包
IRanges
genomarranges
(和
Biostrings
,以确保完整性,尽管不是为了这个特殊的问题)。一旦你获得了Genomarranges,请查看FindVerlaps函数家族

因为您的示例数据实际上没有任何重叠,所以我对其进行了这样的修改

df1 <- structure(list(gene_id = structure(c(2L, 5L, 1L, 3L, 7L, 6L, 
   4L), .Label = c("ENSG00000207157", "ENSG00000223116", "ENSG00000229483", 
   "ENSG00000232849", "ENSG00000233440", "ENSG00000235205", "ENSG00000252952"
   ), class = "factor"), chromosome = c(13L, 13L, 13L, 13L, 13L, 
   13L, 13L), gene_start = c(23551994L, 23708313L, 23726725L, 23743974L, 
   23791571L, 23817659L, 93708910L), gene_end = c(23552136L, 23708703L, 
   23726825L, 23744736L, 23791673L, 23821323L, 93710179L)), .Names = c("gene_id", 
   "chromosome", "gene_start", "gene_end"), class = "data.frame", row.names = c(NA, 
   -7L))
 df2 <- structure(list(Sample = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
  1L, 1L), .Label = "UNDID_p_TCGA_353_354_355_37_NSP_GenomeWideSNP_6_H10_1376930", class = "factor"), 
Chromosome = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), Start = c(61735L, 
82315L, 16871278L, 17089349L, 17210652L, 17262247L, 25593128L, 
25661501L, 30739299L), End = c(82170L, 16869363L, 17087292L, 
17209603L, 17262232L, 25583341L, 25646986L, 30738534L, 30745210L
), Num_Probes = c(9L, 8678L, 85L, 23L, 57L, 5240L, 28L, 2398L, 
7L), Segment_Mean = c(0.256, -0.1199, -0.5386, -0.0807, 0.268, 
-0.1228, -1.8216, -0.0942, -1.3117)), .Names = c("Sample", 
"Chromosome", "Start", "End", "Num_Probes", "Segment_Mean"), class = "data.frame", row.names = c(NA, 
-9L))
df1$chromosome <- 1
df1[6,4] <- 30745215 # to show what happens when there are multiple overlaps

df1你需要做的第一件事就是停止重新发明轮子。熟悉bioconductor软件包
IRanges
genomarranges
(和
Biostrings
,以确保完整性,尽管不是为了这个特殊的问题)。一旦你获得了Genomarranges,请查看FindVerlaps函数家族

因为您的示例数据实际上没有任何重叠,所以我对其进行了这样的修改

df1 <- structure(list(gene_id = structure(c(2L, 5L, 1L, 3L, 7L, 6L, 
   4L), .Label = c("ENSG00000207157", "ENSG00000223116", "ENSG00000229483", 
   "ENSG00000232849", "ENSG00000233440", "ENSG00000235205", "ENSG00000252952"
   ), class = "factor"), chromosome = c(13L, 13L, 13L, 13L, 13L, 
   13L, 13L), gene_start = c(23551994L, 23708313L, 23726725L, 23743974L, 
   23791571L, 23817659L, 93708910L), gene_end = c(23552136L, 23708703L, 
   23726825L, 23744736L, 23791673L, 23821323L, 93710179L)), .Names = c("gene_id", 
   "chromosome", "gene_start", "gene_end"), class = "data.frame", row.names = c(NA, 
   -7L))
 df2 <- structure(list(Sample = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
  1L, 1L), .Label = "UNDID_p_TCGA_353_354_355_37_NSP_GenomeWideSNP_6_H10_1376930", class = "factor"), 
Chromosome = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), Start = c(61735L, 
82315L, 16871278L, 17089349L, 17210652L, 17262247L, 25593128L, 
25661501L, 30739299L), End = c(82170L, 16869363L, 17087292L, 
17209603L, 17262232L, 25583341L, 25646986L, 30738534L, 30745210L
), Num_Probes = c(9L, 8678L, 85L, 23L, 57L, 5240L, 28L, 2398L, 
7L), Segment_Mean = c(0.256, -0.1199, -0.5386, -0.0807, 0.268, 
-0.1228, -1.8216, -0.0942, -1.3117)), .Names = c("Sample", 
"Chromosome", "Start", "End", "Num_Probes", "Segment_Mean"), class = "data.frame", row.names = c(NA, 
-9L))
df1$chromosome <- 1
df1[6,4] <- 30745215 # to show what happens when there are multiple overlaps

df1在您的示例中,提供与基因重叠的snp片段将有助于澄清您是否期望每个基因不超过1个snp片段(这意味着使用“gene_id”作为row.name,因为row.name应该是唯一的).@Arun--我不明白你编辑示例列的目的;看起来这些标识符是有意义的,只有通过使它们“漂亮”才能引入错误。@MartinMorgan,在本例中,所有标识符都是相同的。因此,不确定它会在“此示例数据”上引入什么错误。你能详细说明一下吗?@Arun--它是ems就像一个毫无意义的编辑,丢失了对OP重要的信息。如果身份很重要,而且所有的都是相同的,那么合乎逻辑的做法就是完全删除它们!如果你在这篇文章上投了反对票,那么重新考虑或者至少证明——OP提供了一个合理的可复制的例子和问题,即使在first blush标题读起来就像是许多其他StackOverflow问题的副本。可能评论部分不是进行这些对话的合适位置,对此表示抱歉。@Arun,我知道这些标识符是相同的。这是这些文件的生成方式。我没有创建这些文件,而是以这种格式下载的。它是在您的示例中,我们将帮助您提供与基因重叠的snp片段,并澄清您是否期望每个基因不超过1个snp片段(这意味着使用“gene_id”作为row.name,因为row.name应该是唯一的).@Arun--我不明白你编辑示例列的目的;看起来这些标识符是有意义的,只有通过使它们“漂亮”才能引入错误。@MartinMorgan,在本例中,所有标识符都是相同的。因此,不确定它会在“此示例数据”上引入什么错误。你能详细说明一下吗?@Arun--它是ems就像一个毫无意义的编辑,丢失了对OP重要的信息。如果身份很重要,而且所有的都是相同的,那么合乎逻辑的做法就是完全删除它们!如果你在这篇文章上投了反对票,那么重新考虑或者至少证明——OP提供了一个合理的可复制的例子和问题,即使在first blush标题读起来就像是许多其他StackOverflow问题的副本。可能评论部分不是进行这些对话的合适位置,对此表示抱歉。@Arun,我知道这些标识符是相同的。这是这些文件的生成方式。我没有创建这些文件,而是以这种格式下载的。它是在您的示例中,我们将帮助您提供与基因重叠的snp片段,并澄清您是否期望每个基因不超过1个snp片段(这意味着使用“gene_id”作为row.name,因为row.name应该是唯一的).@Arun--我不明白你编辑示例列的目的;看起来这些标识符是有意义的,只有通过使它们“漂亮”才能引入错误。@MartinMorgan,在本例中,所有标识符都是相同的。因此,不确定它会在“此示例数据”上引入什么错误。你能详细说明一下吗?@Arun--它是ems就像是一个毫无意义的编辑,丢失了对OP很重要的信息。如果身份很重要,而且所有人都是相同的,那么合乎逻辑的做法就是完全删除它们!同样,如果你在这篇文章上投了反对票,那么重新考虑或者至少证明自己是正确的--