【问题标题】:Trouble with subset() in R returning incorrect valuesR 中的子集()返回不正确值的问题
【发布时间】:2012-09-07 15:29:26
【问题描述】:

我正在尝试通过染色体和位置信息对遗传数据区域进行子集化。不幸的是,我的结果不在我的参数范围内。任何帮助将不胜感激。

这是我的代码:

    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)
      ...
     }

【问题讨论】:

  • 请显示对您的子集函数的调用以及 region.info 的内容。
  • 很奇怪 sub_reslts 不是一个逻辑(布尔)向量。你应该调查一下。
  • 发布 str(region.info) 的输出(或者更确切地说是您在调用函数时传递给 region.info 参数的对象。)控制台输出通常是模棱两可的,因为您提供演示。使用strdput 改善沟通。
  • 如果您的问题在于色度匹配,请删除所有其他代码。还有什么子集打印?
  • 我认为您需要阅读?subset,它会警告您不要使用subset() 进行编程。它使用标准的非标准评估规则来查找内容,并且在您自己的函数中使用时可能会出现各种错误。对于初学者,它试图找到看起来像在全局工作区中的results,但使用在函数的执行环境中的sub_results。请改用[

标签: r dataframe subset


【解决方案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,而不是依赖它在全球环境中被发现。

【讨论】:

  • 非常感谢!我将代码移植到它自己的函数中,并错过了我从“结果”更改为更通用的 df。我会加分,但我的声誉太低了。我会根据您的建议考虑使用 [ 来代替。
  • @user1636450 即使有 1 个代表点,您当然可以接受答案。
  • 谢谢!我承认我是个菜鸟,我什至没有意识到这是我的下一步。谢谢 DWin。
  • 看起来结果是错误。
  • @AlexBrown 是的,不确定 OP 的意图是什么,因此我在答案中发表了评论。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-25
  • 1970-01-01
  • 1970-01-01
  • 2017-08-18
  • 1970-01-01
  • 2023-03-04
  • 2019-05-08
相关资源
最近更新 更多