2

2 つのテストでケース (x,y) をチェックする関数を作成するにはどうすればよいですか。

1

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、どのテストが失敗したかについての警告が表示されます。

4

2 に答える 2

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
}
于 2012-12-04T16:29:37.497 に答える
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
于 2012-12-04T18:18:57.140 に答える