Skip to content

Commit 137ca4c

Browse files
authored
froll improve error messages (#7289)
1 parent 4b05edd commit 137ca4c

File tree

3 files changed

+37
-37
lines changed

3 files changed

+37
-37
lines changed

R/frollapply.R

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -141,9 +141,9 @@ frollapply = function(X, N, FUN, ..., by.column=TRUE, fill=NA, align=c("right","
141141
stopf("'N' must be non 0 length")
142142
if (!adaptive) {
143143
if (is.list(N))
144-
stopf("'N' must be integer, list is accepted for adaptive TRUE")
144+
stopf("'N' must be an integer, list is accepted for adaptive TRUE")
145145
else if (!is.numeric(N))
146-
stopf("'N' must be integer vector")
146+
stopf("'N' must be an integer")
147147
nnam = names(N) ## used for give.names
148148
if (!is.integer(N))
149149
N = as.integer(N)
@@ -165,13 +165,13 @@ frollapply = function(X, N, FUN, ..., by.column=TRUE, fill=NA, align=c("right","
165165
if (!equal.lengths(N))
166166
stopf("adaptive windows provided in 'N' must not to have different lengths")
167167
if (!all(vapply_1b(N, is.numeric, use.names=FALSE)))
168-
stopf("n must be an integer vector or list of an integer vectors")
168+
stopf("'N' must be an integer vector or list of integer vectors")
169169
if (!all(vapply_1b(N, is.integer, use.names=FALSE)))
170170
N = lapply(N, as.integer)
171171
nn = length(N)
172172
nnam = names(N)
173173
} else
174-
stopf("n must be an integer vector or list of an integer vectors")
174+
stopf("'N' must be an integer vector or list of integer vectors")
175175
}
176176
## partial
177177
if (partial) {

inst/tests/froll.Rraw

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -78,22 +78,22 @@ test(6000.011, frollmean(x, n, adaptive=TRUE), list(c(NA, 1, 1.25), c(NA, 1, 1.2
7878

7979
#### error on unsupported type
8080
dx = data.table(real=1:10/2, char=letters[1:10])
81-
test(6000.012, frollmean(dx, 3), error="x must be of type numeric or logical, or a list, data.frame or data.table of such")
81+
test(6000.012, frollmean(dx, 3), error="'x' must be of type numeric or logical, or a list, data.frame or data.table of such")
8282
dx = data.table(real=1:10/2, fact=factor(letters[1:10]))
83-
test(6000.013, frollmean(dx, 3), error="x must be of type numeric or logical, or a list, data.frame or data.table of such")
83+
test(6000.013, frollmean(dx, 3), error="'x' must be of type numeric or logical, or a list, data.frame or data.table of such")
8484
#dx = data.table(real=1:10/2, logi=logical(10))
8585
#test(6000.014, frollmean(dx, 3), error="x must be list, data.frame or data.table of numeric types") # commented out as support added in #3749, tested in .009
8686
dx = data.table(real=1:10/2, list=rep(list(NA), 10))
87-
test(6000.015, frollmean(dx, 3), error="x must be of type numeric or logical, or a list, data.frame or data.table of such")
87+
test(6000.015, frollmean(dx, 3), error="'x' must be of type numeric or logical, or a list, data.frame or data.table of such")
8888
x = letters[1:10]
89-
test(6000.016, frollmean(x, 3), error="x must be of type numeric or logical, or a list, data.frame or data.table of such")
89+
test(6000.016, frollmean(x, 3), error="'x' must be of type numeric or logical, or a list, data.frame or data.table of such")
9090
x = 1:10/2
91-
test(6000.017, frollmean(x, "a"), error="n must be integer")
92-
test(6000.018, frollmean(x, factor("a")), error="n must be integer")
93-
test(6000.019, frollmean(x, TRUE), error="n must be integer")
94-
test(6000.020, frollmean(x, list(1:10)), error="n must be integer, list is accepted for adaptive TRUE")
95-
test(6000.021, frollmean(x, list(NA), adaptive=TRUE), error="n must be an integer vector or list of an integer vectors")
96-
test(6000.022, frollmean(x, list(c(1:5,1:5), NA), adaptive=TRUE), error="n must be an integer vector or list of an integer vectors")
91+
test(6000.017, frollmean(x, "a"), error="'n' must be an integer")
92+
test(6000.018, frollmean(x, factor("a")), error="'n' must be an integer")
93+
test(6000.019, frollmean(x, TRUE), error="'n' must be an integer")
94+
test(6000.020, frollmean(x, list(1:10)), error="'n' must be an integer, list is accepted for adaptive TRUE")
95+
test(6000.021, frollmean(x, list(NA), adaptive=TRUE), error="'n' must be an integer vector or list of integer vectors")
96+
test(6000.022, frollmean(x, list(c(1:5,1:5), NA), adaptive=TRUE), error="'n' must be an integer vector or list of integer vectors")
9797

9898
#### various length list vectors
9999
l = list(1:6/2, 3:10/4)
@@ -371,10 +371,10 @@ test(6000.086, frollmean(list(1:3, 2:4), integer()), error="n must be non 0 leng
371371
#### n==0 (k==0, k[i]==0)
372372
## 6000.87 6000.88 moved to 6001.
373373
#### n<0
374-
test(6000.089, frollmean(1:3, -2), error="n must be non-negative integer values")
375-
test(6000.0891, frollmean(1:3, c(-2,2), adaptive=TRUE), error="n must be non-negative integer values")
374+
test(6000.089, frollmean(1:3, -2), error="'n' must be non-negative integer values (>= 0)")
375+
test(6000.0891, frollmean(1:3, c(-2,2), adaptive=TRUE), error="'n' must be non-negative integer values (>= 0)")
376376
#### n[[1L]]>0 && n[[2L]]<0
377-
test(6000.090, frollmean(1:3, c(2, -2)), error="n must be non-negative integer values")
377+
test(6000.090, frollmean(1:3, c(2, -2)), error="'n' must be non-negative integer values (>= 0)")
378378
#### n[[1L]]==n[[2L]]
379379
test(6000.091, frollmean(1:3, c(2, 2)), list(c(NA_real_, 1.5, 2.5), c(NA_real_, 1.5, 2.5)))
380380
test(6000.092, frollmean(list(1:3, 4:6), c(2, 2)), list(c(NA_real_, 1.5, 2.5), c(NA_real_, 1.5, 2.5), c(NA_real_, 4.5, 5.5), c(NA_real_, 4.5, 5.5)))
@@ -411,17 +411,17 @@ test(6000.111, frollmean(list(1, 10, 5), 2, align="left"), list(NA_real_, NA_rea
411411
test(6000.112, frollmean(5, 2, align="center"), NA_real_)
412412
test(6000.113, frollmean(list(1, 10, 5), 2, align="center"), list(NA_real_, NA_real_, NA_real_))
413413
#### n==Inf
414-
test(6000.114, frollmean(1:5, Inf), error="n must be non-negative integer values", warning="NAs introduced by coercion*")
414+
test(6000.114, frollmean(1:5, Inf), error="'n' must be non-negative integer values (>= 0)", warning="NAs introduced by coercion*")
415415
#### n==c(5, Inf)
416-
test(6000.115, frollmean(1:5, c(5, Inf)), error="n must be non-negative integer values", warning="NAs introduced by coercion*")
416+
test(6000.115, frollmean(1:5, c(5, Inf)), error="'n' must be non-negative integer values (>= 0)", warning="NAs introduced by coercion*")
417417
#### is.complex(n)
418-
test(6000.116, frollmean(1:5, 3i), error="n must be integer")
418+
test(6000.116, frollmean(1:5, 3i), error="'n' must be an integer")
419419
#### is.character(n)
420-
test(6000.117, frollmean(1:5, "a"), error="n must be integer")
420+
test(6000.117, frollmean(1:5, "a"), error="'n' must be an integer")
421421
#### is.factor(n)
422-
test(6000.118, frollmean(1:5, as.factor("a")), error="n must be integer")
422+
test(6000.118, frollmean(1:5, as.factor("a")), error="'n' must be an integer")
423423
#### is.list(n)
424-
test(6000.119, frollmean(1:5, list(1:5)), error="n must be integer, list is accepted for adaptive TRUE")
424+
test(6000.119, frollmean(1:5, list(1:5)), error="'n' must be an integer, list is accepted for adaptive TRUE")
425425
#### adaptive=NA
426426
test(6000.1192, frollmean(1:5, 2, adaptive=NA), error="adaptive must be TRUE or FALSE")
427427
#### na.rm=NA
@@ -453,7 +453,7 @@ test(6000.1197, frollmean(c(1:5,NA), 2, algo="exact", na.rm=TRUE), output=c(
453453
))
454454
options(datatable.verbose=FALSE)
455455
#### adaptive=TRUE n=character
456-
test(6000.1198, frollmean(1:5, n=letters[1:5], adaptive=TRUE), error="n must be an integer vector or list of an integer vectors")
456+
test(6000.1198, frollmean(1:5, n=letters[1:5], adaptive=TRUE), error="'n' must be an integer vector or list of integer vectors")
457457

458458
#### non-finite values (NA, NaN, Inf, -Inf)
459459
ma = function(x, n, na.rm=FALSE, nf.rm=FALSE) {
@@ -1293,12 +1293,12 @@ ans = frollapply(FUN=mean, x, n, align="left")
12931293
ans[(length(x)-n-1L):length(x)] = frollapply(FUN=mean, x[(length(x)-n-1L):length(x)], n, partial=TRUE, align="left")
12941294
test(6010.123, ans, c(1,1.5,2,2.5,2.75,3))
12951295
ans = list(c(0.50,0.75,1.00,1.50,2.00,2.50), c(0.50,0.75,1.00,1.25,1.75,2.25))
1296-
test(6010.131, frollapply(FUN=mean, 1:6/2, list(3L,4L), partial=TRUE), error="'N' must be integer, list is accepted for adaptive TRUE")
1296+
test(6010.131, frollapply(FUN=mean, 1:6/2, list(3L,4L), partial=TRUE), error="'N' must be an integer, list is accepted for adaptive TRUE")
12971297
test(6010.132, frollapply(FUN=mean, 1:6/2, 3:4, partial=TRUE), ans)
12981298
test(6010.143, frollapply(FUN=mean, 1:4, 2L, align="center", partial=TRUE), error="'partial' cannot be used together with align='center'")
12991299
test(6010.144, frollapply(FUN=mean, list(1:4, 2:4), n, partial=TRUE), error="'partial' does not support variable length of columns in x")
1300-
test(6010.145, frollapply(FUN=mean, x, TRUE, partial=TRUE), error="'N' must be integer vector")
1301-
test(6010.146, frollapply(FUN=mean, x, list(TRUE), partial=TRUE), error="'N' must be integer, list is accepted for adaptive TRUE")
1300+
test(6010.145, frollapply(FUN=mean, x, TRUE, partial=TRUE), error="'N' must be an integer")
1301+
test(6010.146, frollapply(FUN=mean, x, list(TRUE), partial=TRUE), error="'N' must be an integer, list is accepted for adaptive TRUE")
13021302
## growable failed if length was set after copy: attempt to set index 1/1 in SET_STRING_ELT
13031303
old = setDTthreads(1L)
13041304
test(6010.150, frollapply(c("B","B","C"), 3, unique, simplify=FALSE, partial=TRUE), list("B", "B", c("B","C")))
@@ -1324,7 +1324,7 @@ test(6010.205, frollapply(c(2,2,2,3,4), c(1,3,3,2,3), uniqueN, adaptive=TRUE), c
13241324
test(6010.206, frollapply(1:5, c(NA,NA,3,2,3), sum, adaptive=TRUE), c(NA,NA,6L,7L,12L)) ## NAs in adaptive window are ok
13251325

13261326
#### test coverage
1327-
test(6010.501, frollapply(1:3, "b", sum), error="'N' must be integer")
1327+
test(6010.501, frollapply(1:3, "b", sum), error="'N' must be an integer")
13281328
test(6010.503, frollapply(1:3, integer(), sum), error="'N' must be non 0 length")
13291329
test(6010.504, frollapply(1:3, 2L, sum, fill=1:2), list(1:2, 3L, 5L))
13301330
test(6010.505, frollapply(1:3, 2L, sum, fill=NA_integer_), c(NA,3L,5L))
@@ -1380,8 +1380,8 @@ test(6010.545, frollapply(1:2, 2, sum, simplify=NA), error="must be TRUE or FALS
13801380
test(6010.561, frollapply(x=1:2, N=2, FUN=sum), c(NA,3L), warning="'x' is deprecated in frollapply, use 'X' instead")
13811381
test(6010.562, frollapply(X=1:2, n=2, FUN=sum), c(NA,3L), warning="'n' is deprecated in frollapply, use 'N' instead")
13821382
test(6010.563, frollapply(x=1:2, n=2, FUN=sum), c(NA,3L), warning=c("'x' is deprecated in frollapply, use 'X' instead","'n' is deprecated in frollapply, use 'N' instead"))
1383-
test(6010.564, frollapply(1:2, c("a","a"), length, adaptive=TRUE), error="n must be an integer vector or list of an integer vectors")
1384-
test(6010.565, frollapply(1:2, list(c("a","a")), length, adaptive=TRUE), error="n must be an integer vector or list of an integer vectors")
1383+
test(6010.564, frollapply(1:2, c("a","a"), length, adaptive=TRUE), error="'N' must be an integer vector or list of integer vectors")
1384+
test(6010.565, frollapply(1:2, list(c("a","a")), length, adaptive=TRUE), error="'N' must be an integer vector or list of integer vectors")
13851385
test(6010.566, frollapply(1:2, 2, length, by.column=FALSE), error="frollapply by.column=FALSE requires 'X' argument to be")
13861386
test(6010.567, frollapply(list(1:2, list(c("a","b"))), 2, length, by.column=FALSE), error="frollapply by.column=FALSE got list in 'X' but it is not valid one")
13871387
test(6010.568, frollapply(list(data.frame(x=1:2), data.frame(x=I(list(1:2)))), 2, length, by.column=FALSE), error="not all columns of data.frames/data.tables are atomic")

src/frollR.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ SEXP coerceX(SEXP obj) {
1515
for (R_len_t i=0; i<nobj; i++) {
1616
SEXP this_obj = VECTOR_ELT(obj, i);
1717
if (!(isReal(this_obj) || isInteger(this_obj) || isLogical(this_obj)))
18-
error(_("x must be of type numeric or logical, or a list, data.frame or data.table of such"));
18+
error(_("'x' must be of type numeric or logical, or a list, data.frame or data.table of such"));
1919
SET_VECTOR_ELT(x, i, coerceAs(this_obj, PROTECT(ScalarReal(NA_REAL)), /*copyArg=*/ScalarLogical(false))); // copyArg=false will make type-class match to return as-is, no copy
2020
UNPROTECT(1); // as= input to coerceAs()
2121
}
@@ -28,20 +28,20 @@ SEXP coerceK(SEXP obj, bool adaptive) {
2828
SEXP ans = R_NilValue;
2929
if (!adaptive) {
3030
if (isNewList(obj))
31-
error(_("n must be integer, list is accepted for adaptive TRUE"));
31+
error(_("'n' must be an integer, list is accepted for adaptive TRUE"));
3232
if (isInteger(obj)) {
3333
ans = obj;
3434
} else if (isReal(obj)) {
3535
ans = PROTECT(coerceVector(obj, INTSXP)); protecti++;
3636
} else {
37-
error(_("n must be integer"));
37+
error(_("'n' must be an integer"));
3838
}
3939
int nk = length(obj);
4040
R_len_t i = 0;
4141
int *iik = INTEGER(ans);
4242
while (i < nk && iik[i] >= 0) i++;
4343
if (i != nk)
44-
error(_("n must be non-negative integer values (>= 0)"));
44+
error(_("'n' must be non-negative integer values (>= 0)"));
4545
} else {
4646
if (isVectorAtomic(obj)) {
4747
ans = PROTECT(allocVector(VECSXP, 1)); protecti++;
@@ -50,7 +50,7 @@ SEXP coerceK(SEXP obj, bool adaptive) {
5050
} else if (isReal(obj)) {
5151
SET_VECTOR_ELT(ans, 0, coerceVector(obj, INTSXP));
5252
} else {
53-
error(_("n must be an integer vector or list of an integer vectors"));
53+
error(_("'n' must be an integer vector or list of integer vectors"));
5454
}
5555
} else {
5656
int nk = length(obj);
@@ -61,7 +61,7 @@ SEXP coerceK(SEXP obj, bool adaptive) {
6161
} else if (isReal(VECTOR_ELT(obj, i))) {
6262
SET_VECTOR_ELT(ans, i, coerceVector(VECTOR_ELT(obj, i), INTSXP));
6363
} else {
64-
error(_("n must be an integer vector or list of an integer vectors"));
64+
error(_("'n' must be an integer vector or list of integer vectors"));
6565
}
6666
}
6767
}
@@ -71,7 +71,7 @@ SEXP coerceK(SEXP obj, bool adaptive) {
7171
R_len_t ii = 0;
7272
while (ii < nx && iik[ii] >= 0) ii++;
7373
if (ii != nx)
74-
error(_("n must be non-negative integer values (>= 0)"));
74+
error(_("'n' must be non-negative integer values (>= 0)"));
7575
}
7676
}
7777
UNPROTECT(protecti);

0 commit comments

Comments
 (0)