如何编写一个函数来检查两者的情况(x,y) 测试:
一
if y==rank(y)
两个
xranks <- rank(x)
yranks <- rank(y)
meanx <- mean(xranks)
meany <- mean(yranks)
covariance.term <- cov(xranks-meanx,y-meany)
sd.x <- sd(xranks)
sd.y <- sd(yranks)
if -1<= covariance.term/(sd.x*sd.y) <=1
如果两个测试都通过,则应返回TRUE
,或FALSE
,并警告哪些测试失败。
答案 0 :(得分:1)
以下应该做你想要的,但由于你没有提供测试用例,我不确定它是否有效。
check.xy <- function(x,y) {
xranks <- rank(x)
yranks <- rank(y)
meanx <- mean(xranks)
meany <- mean(yranks)
covariance.term <- cov(xranks-meanx,y-meany)
sd.x <- sd(xranks)
sd.y <- sd(yranks)
testA <- all(y == rank(y))
testB <- all(-1 <= covariance.term/(sd.x*sd.y) & covariance.term/(sd.x*sd.y) <=1)
if (testA & testB) return(TRUE)
else if (testA) warning("test two failed")
else if (testB) warning("test one failed")
else warning("tests one and two failed")
FALSE
}
答案 1 :(得分:0)
我认为在单个函数中定义每个测试,尤其是我们想要警告哪些测试失败。
2个测试共享相同的环境,这就是我将它们定义为嵌套函数的原因。
multitest <- function(x,y){
test.covariance <- function(){
xranks <- rank(x)
yranks <- rank(y)
meanx <- mean(xranks)
meany <- mean(yranks)
covariance.term <- cov(xranks-meanx,y-meany)
sd.x <- sd(xranks)
sd.y <- sd(yranks)
cov.norm <- covariance.term/(sd.x*sd.y)
res <- cov.norm > -1 && cov.norm < 1
if(is.na(res) || res > 0) warning('test covariance range failed',.call = FALSE)
res
}
test.rank <- function(){
res <- all(y==rank(y))
if(!res) warning('test rank failed')
res
}
res <- test.covariance() && test.rank()
!is.na(res)
}
一些测试:
成功
x <- 1:10
y <- 1:10
multitest(x,y)
[1] TRUE
失败等级
x <- rnorm(10)
y <- rnorm(10)
multitest(x,y)
[1] FALSE
Warning message:
In test.rank() : test rank failed
失败协方差
x <- rep(10,10)
y <- 1:10
multitest(x,y)
[1] FALSE
Warning message:
In test.covariance() : test covariance range failed