R中的subset()返回错误值时出现问题

R中的subset()返回错误值时出现问题,r,dataframe,subset,R,Dataframe,Subset,我试图通过染色体和位置信息对遗传数据的一个区域进行子集划分。不幸的是,我的结果不在我的参数范围内。任何帮助都将不胜感激 这是我的密码: subset.by.region<- function(df,region.info, expansion=0){ MBstart = as.numeric(region.info[[3]]) - expansion MBend = as.numeric(region.info[[4]]) + expansion ch

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

这是我的密码:

    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)
    }
以下是来自子集的打印(区域\结果):

如您所见,在子集中有一行包含第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)
      ...
     }

write.genelist我会使用
[
在函数中进行子集,而不是
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, ]
}

subset.by.region我将使用
[
在函数中进行子集,而不是
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, ]
}


subset.by.region请显示对子集函数的调用以及region.info的内容。sub_reslts不是逻辑(布尔)向量,这很奇怪。您应该对此进行研究。发布str(region.info)的输出(或者更确切地说是调用函数时传递给region.info参数的对象)控制台输出通常不明确,正如您的产品所示。使用
str
dput
来改善沟通。如果您的问题在于色度匹配,请删除所有其他代码。还有什么子集打印?我想您需要阅读
?subset
,它警告您不要使用
subset()
用于编程。它使用标准的非标准求值规则来查找内容,在您自己的函数中使用时可能会出现各种错误。对于初学者,它尝试查找
结果
,它看起来像是在全局工作区中,但使用
sub_结果
,它在函数的执行环境中Action.改为使用
[
。请显示对子集函数的调用以及region.info的内容。sub_reslts不是逻辑(布尔)向量,这很奇怪。您应该对此进行研究。发布str(region.info)的输出(或者更确切地说是调用函数时传递给region.info参数的对象)控制台输出通常不明确,正如您的产品所示。使用
str
dput
来改善沟通。如果您的问题在于色度匹配,请删除所有其他代码。还有什么子集打印?我想您需要阅读
?subset
,它警告您不要使用
subset()
用于编程。它使用标准的非标准求值规则来查找内容,在您自己的函数中使用时可能会出现各种错误。对于初学者,它尝试查找
结果
,它看起来像是在全局工作区中,但使用
sub_结果
,它在函数的执行环境中Action.改用
[
。非常感谢!我将代码移植到了它自己的函数中,错过了将“results”更改为更通用的df的机会。我会加分,但我的声誉太低。我会研究如何使用它[而是按照你的建议。@user1636450你当然可以接受一个答案,即使有1个代表点。谢谢你!我承认我是一个笨蛋,我甚至没有意识到这是我的下一步。谢谢你,德温。看起来结果就是错误。@AlexBrown是的,不确定OP的意图,因此我在答案中发表了评论。非常感谢!我同意了将代码转换为自己的函数,并忽略了我已从“结果”更改为更通用的df。我会标记,但我的声誉太低。我将研究如何使用它[而是按照你的建议。@user1636450你当然可以接受一个答案,即使有1个代表点。谢谢你!我承认我是个笨蛋,我甚至没有意识到这是我的下一步。谢谢你,德温。看起来结果就是错误。@AlexBrown是的,不确定OP的意图,因此我在答案中发表了评论。
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, ]
}