gpt4 book ai didi

unit-testing - 为什么我的单元测试在 R 控制台中成功运行,但返回错误 "make test"?

转载 作者:行者123 更新时间:2023-12-04 11:58:58 28 4
gpt4 key购买 nike

我正在学习如何开发 R 包。一切顺利,感谢 R 手册和 this RUnit 的 wiki。更准确地说,当我在新的 R 控制台中启动我的单元测试时,所有测试都成功完成:

#rm(list=ls())
library(RUnit)
testSuite <- defineTestSuite("current", "~/src/mypkg/inst/unitTests/")
isValidTestSuite # returns TRUE
runTestSuite(testSuite) # returns Number of errors: 0 and Number of failures: 0

但是,当我在终端中启动它们时,出现了一个错误(有问题的函数使用了我安装在“~/src/Rlibs”中的包 GenomicRanges):
$ make test R_LIBS="~/src/Rlibs/"
...
ERROR in test.MyFunction: Error in match(x, table, nomatch = 0L) :
'match' requires vector arguments

我不明白是什么导致了这个错误。我想您将需要有关代码和测试的更多信息,但这并不容易,因为我不知道如何在不为此制作新包的情况下在一个小示例上复制此错误。也许你们中的一些人会对这个错误信息有所了解并给我一些提示?

编辑:为了帮助某人给我一个错误提示,这是我为一个虚拟包编写的代码。目的是找出“p”的哪些项目包含在“g”的项目中。

这是测试:
test.MyFunction <- function(){
g <- list(c1=data.frame(name=c("g1","g2"), start=c(11,1111),
end=c(500,1500), strand=c("+","+"), stringsAsFactors=FALSE))
p <- list(c1=data.frame(name=c("p1","p2"), strand=c("+","-"),
start=c(11,601), end=c(20, 610), stringsAsFactors=FALSE))
exp <- list(c1=list(g1=c("p1"))) # item "p1" is included in item "g1"
obs <- MyFunction(g, p)
checkEquals(obs, exp)
}

这是函数本身:
MyFunction <- function(g, p){
res <- lapply(names(g), function(c.name){
res.c <- list()
nb.g <- length(g[[c.name]]$name)

if(length(.find.package("GenomicRanges", quiet=TRUE)) > 0){
g.ranges <- GRanges(seqnames=Rle(c(c.name), c(nb.g)),
ranges=IRanges(g[[c.name]]$start,
g[[c.name]]$end, names=g[[c.name]]$name),
strand="*")
p.ranges <- GRanges(seqnames=Rle(c(c.name), nrow(p[[c.name]])),
ranges=IRanges(p[[c.name]]$start,
p[[c.name]]$end, names=p[[c.name]]$name),
strand=p[[c.name]]$strand)
for(g.name in names(g.ranges)){
links <- p.ranges %in% g.ranges[names(g.ranges) == g.name]
if(sum(links) > 0)
res.c[[g.name]] <- names(p.ranges)[which(links)]
}
} else{
msg <- "can't find package GenomicRanges"
stop(msg, call.=FALSE)
}
res.c
})

names(res) <- names(g)
return(res)
}

最佳答案

我认为这条线是你的罪魁祸首:
links <- p.ranges %in% g.ranges[names(g.ranges) == g.name] .
%in%match ,这就是错误消息似乎正在阅读的内容:

ERROR in test.MyFunction: Error in match(x, table, nomatch = 0L) :
'match' requires vector arguments

有关于 p.ranges的事情和 g.ranges它不喜欢。即,它们不能被强制为向量,或者您没有正确设置子集并且对象类型不正确( [[[ )。

关于unit-testing - 为什么我的单元测试在 R 控制台中成功运行,但返回错误 "make test"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7290832/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com