我認爲要在單個函數中定義每個測試,尤其是我們需要警告哪些測試失敗。
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
感謝Henrik,它的工作原理。但返回另一個警告消息,如果(testA&testB)返回(TRUE)否則如果(testA)警告(「測試兩個失敗」)否則如果(testB)警告(「測試一個失敗」)其他警告(「測試一個和兩個失敗「)條件長度> 1,只有第一個元素將用任何方式來解決? – RandyHuang
@RandyHuang請參閱我的編輯。將測試包裝在'all()'中的更改應確保測試與'y'的所有元素匹配(我也確保測試2返回單個值,但這似乎是不必要的)。 – Henrik