2012-09-07 47 views
1

我试图通过染色体和位置信息对遗传数据区域进行子集化。不幸的是,我的结果不在我的参数范围内。任何帮助,将不胜感激。R中的子集()返回错误值时遇到问题

这是我的代码:

subset.by.region<- function(df,region.info, expansion=0){ 
    MBstart = as.numeric(region.info[[3]]) - expansion 
    MBend = as.numeric(region.info[[4]]) + expansion 
    chrom =as.numeric(region.info[[2]]) 
    print(chrom) 
    print(MBstart) 
    print(MBend) 
    BPstart <- MBstart * 1e6 
    BPend <- MBend * 1e6 
    sub_results <- as.numeric(df$CHR) == chrom & as.numeric(df$BP) >= BPstart & as.numeric(df$BP) <= BPend; 
    print(head(sub_results)) 
    region_results <- subset(results, sub_results) 
    return(region_results) 
    } 

以下是所使用的打印到包含该区域的信息的控制台:

[1] 1 
[1] 113.308 
[1] 115.158 

下面是从所述子集打印(region_results):

 GENE CHR  SNP EMP1 NP  BP   SNP_IM SNP_LZ 
3238 AP3S1 5 rs26538 1.00000 6 115178395   rs26538 rs26538 
3239 AP4B1 1 rs1217401 1.00000 46 114438951 imm_1_114240474 rs1217401 
3240 AP4B1 1 rs1217402 1.00000 41 114440258 imm_1_114241781 rs1217402 
3241 AP4B1 1 rs3789613 1.00000 297 114443035 imm_1_114244558 rs3789613 
3242 AP4B1 1 rs7523862 1.00000 297 114443419 imm_1_114244942 rs7523862 
3243 AP4B1 1 rs17464525 1.00000 148 114443899 imm_1_114245422 rs17464525 

正如您所看到的,子集中有一行包含染色体5中的标记。我究竟做错了什么?先谢谢你。 编辑: 这里是呼与东西的功能之前:

 write.genelist <- function(table_loc, region.info, out_folder,yank_loc){ 
     region.ID = as.character(region.info[[1]]) 
     out_name = paste0(region.ID,"_genes.list") 
     region_folder = file.path(out_folder, region.ID) 
     out_loc <- file.path(region_folder,out_name, fsep = .Platform$file.sep) 
     results <- read.table(table_loc, T,strip.white = TRUE) 
     gene_region_results <- subset.by.region(results,region.info) 
     ... 
    } 
+0

请显示对子集函数的调用以及region.info的内容。 –

+0

sub_reslts不是逻辑(布尔)向量,这很奇怪。你应该看看。 –

+0

发布str(region.info)的输出(或者在您调用函数时传递给region.info参数的对象)。控制台输出通常不明确,正如您的产品演示所示。使用'str'和'dput'来改善沟通。 –

回答

1

我会用[在功能不subset()到子集。请参阅?subset为什么。

subset.by.region<- function(results, df, region.info, expansion=0){ 
    MBstart = as.numeric(region.info[[3]]) - expansion 
    MBend = as.numeric(region.info[[4]]) + expansion 
    chrom =as.numeric(region.info[[2]]) 
    print(chrom) 
    print(MBstart) 
    print(MBend) 
    BPstart <- MBstart * 1e6 
    BPend <- MBend * 1e6 
    sub_results <- as.numeric(df$CHR) == chrom & 
     as.numeric(df$BP) >= BPstart & as.numeric(df$BP) <= BPend 
    print(head(sub_results)) 
    results[sub_results, ] 
} 

我也将通过在results不依赖于它在全球环境中被人发现。

+1

非常感谢!我将代码移植到自己的函数中,并错过了我从“结果”更改为更一般的df。我会标记,但我的声誉太低。我会考虑使用[而不是根据你的建议。 – user1636450

+1

@ user1636450即使有1个代表点,您当然也可以接受答案。 –

+1

谢谢!我承认我是一个小白菜,我甚至没有意识到这是我的下一步。谢谢迪文。 – user1636450