2012-09-07 2 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 точкой rep. –

+1

Спасибо! Я признаю, что я такой нуб, что я даже не понял, что это был мой следующий шаг. Спасибо, DWin. – user1636450