diff --git a/R/WeightedMean.R b/R/WeightedMean.R index 81077ca4b92ddbf5b5cb5d1520cc12063da69cd1..393f56f680ffba9c459d69884043ed55f79a036b 100644 --- a/R/WeightedMean.R +++ b/R/WeightedMean.R @@ -124,11 +124,10 @@ WeightedMean <- function(data, lon, lat, region = NULL, mask = NULL, londim = NU cosphi <- t(array(cos(lat * pi / 180), dim = c(length(lat), length(lon)))) nblat <- length(lat) nblon <- length(lon) - lon[lon > 180] = lon[lon > 180] - 360 - dlon <- abs(c(abs(lon[2 : nblon]) - abs(lon[1 : nblon - 1]))) * pi / 180 + dlon <- diff(lon) * pi / 180 dlon <- c(dlon, dlon[1]) dlon <- array(dlon, dim = c(nblon, nblat)) - dlat <- abs(c(lat[2 : nblat] - lat[1 : nblat - 1])) * pi / 180 + dlat <- diff(lat) * pi / 180 dlat <- c(dlat, dlat[1]) dlat <- t(array(dlat, dim = c(nblat, nblon))) weight <- (dlon * dlat * cosphi) diff --git a/tests/testthat/test-WeightedMean.R b/tests/testthat/test-WeightedMean.R new file mode 100644 index 0000000000000000000000000000000000000000..2c5a23176bfe912072b9d12fbbdbafeb55615c5d --- /dev/null +++ b/tests/testthat/test-WeightedMean.R @@ -0,0 +1,71 @@ +context("WeightedMean tests") +set.seed(1) +dat1 <- array(rnorm(10000), dim = c(lat = 50, lon = 100)) +lat1 <- seq(-90, 90, length.out = 50) +lon1 <- seq(0, 360, length.out = 101)[1:100] + +set.seed(1) +dat2 <- array(rnorm(10000), dim = c(lat = 180, lon = 360, sdate = 2)) +lat2 <- seq(-89.5, 89.5, length.out = 180) +lon2 <- seq(-180, 179, length.out = 360) + +set.seed(1) +dat3 <- array(rnorm(10000), dim = c(sdate = 2, lat = 171, lon = 350)) +lat3 <- seq(-90, 90, length.out = 181)[c(1:80, seq(81, 101, by = 2), 102:181)] +lon3 <- seq(-180, 179, length.out = 360)[c(1:170, seq(171, 190, by = 2), 191:360)] + +set.seed(1) +dat4 <- array(rnorm(10000), dim = c(lat = 180, lon = 360, sdate = 2, time = 1)) +lat4 <- seq(-89.5, 89.5, length.out = 180) +lon4 <- seq(-179.5, 179.5, length.out = 360) + + +test_that("dat1", { +expect_equal( +dim(WeightedMean(dat1, lat = lat1, lon = lon1)), +NULL +) +expect_equal( +as.vector(WeightedMean(dat1, lat = lat1, lon = lon1)), +-0.009785971, +tolerance = 0.0001 +) +}) + +test_that("dat2", { +expect_equal( +dim(WeightedMean(dat2, lat = lat2, lon = lon2)), +NULL +) +expect_equal( +as.vector(WeightedMean(dat2, lat = lat2, lon = lon2)), +c(-0.005799676, -0.007599831), +tolerance = 0.0001 +) +}) + +test_that("dat3", { +expect_equal( +dim(WeightedMean(dat3, lat = lat3, lon = lon3)), +NULL +) +expect_equal( +as.vector(WeightedMean(dat3, lat = lat3, lon = lon3)), +c(-0.0253997, 0.0132251), +tolerance = 0.0001 +) + +}) + + +test_that("dat4", { +expect_equal( +dim(WeightedMean(dat4, lat = lat4, lon = lon4)), +c(sdate = 2, time = 1) +) +expect_equal( +as.vector(WeightedMean(dat4, lat = lat4, lon = lon4)), +c(-0.005799676, -0.007599831), +tolerance = 0.0001 +) +})