Skip to content

Commit bb9c35c

Browse files
Fix #6512: Informative error message for missing measure.vars
1 parent 291a711 commit bb9c35c

File tree

3 files changed

+16
-2
lines changed

3 files changed

+16
-2
lines changed

R/fmelt.R

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,15 @@ melt.data.table = function(data, id.vars, measure.vars, variable.name = "variabl
195195
}
196196
}
197197
}
198+
199+
# GSoC Fix for #6512
200+
if (is.character(measure.vars)) {
201+
if (length(invalid_vars <- setdiff(measure.vars, names(data)))) {
202+
stopf("One or more values in 'measure.vars' is invalid; please fix by removing [%s]",
203+
paste(invalid_vars, collapse = ", "))
204+
}
205+
}
206+
198207
if (is.list(measure.vars)) {
199208
meas.nm = names(measure.vars)
200209
if (is.null(meas.nm)) {

inst/tests/tests.Rraw

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21959,3 +21959,8 @@ test(2355.1, fread(txt, skip=0), data.table(V1 = c("b1", "c1"), a1
2195921959
test(2355.2, fread(txt, skip=0, header=TRUE), data.table(V1 = c("b1", "c1"), a1 = c("b2", "c2"), a2 = c("b3", "c3")), warning="Added an extra default column name")
2196021960
test(2355.3, fread(txt, skip=0, header=FALSE), data.table(V1=character(), V2=character(), V3=character()), warning="Consider fill=TRUE")
2196121961
test(2355.4, fread(txt, skip=0, fill=TRUE), data.table(V1 = c("a1", "b1", "c1"), V2 = c("a2", "b2", "c2"), V3 = c("", "b3", "c3")))
21962+
21963+
# Test for issue #6512: Informative error message for missing measure.vars
21964+
DT = data.table(x1=1, x2=2)
21965+
test(2154.1, melt(DT, measure.vars=c("x1", "z1")),
21966+
error="One or more values in 'measure.vars' is invalid; please fix by removing [z1]")

src/fmelt.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ bool is_default_measure(SEXP vec) {
179179
// maybe unlist, then unique, then set_diff.
180180
SEXP uniq_diff(SEXP int_or_list, int ncol, bool is_measure) {
181181
SEXP int_vec = PROTECT(isNewList(int_or_list) ? unlist_(int_or_list) : int_or_list);
182-
SEXP is_duplicated = PROTECT(duplicated(int_vec, FALSE));
182+
SEXP is_duplicated = PROTECT(duplicated(int_vec, FALSE));
183183
int n_unique_cols = 0;
184184
for (int i=0; i<length(int_vec); ++i) {
185185
int col_number = INTEGER(int_vec)[i];
@@ -193,7 +193,7 @@ SEXP uniq_diff(SEXP int_or_list, int ncol, bool is_measure) {
193193
}
194194
} else if (!LOGICAL(is_duplicated)[i]) n_unique_cols++;
195195
}
196-
SEXP unique_col_numbers = PROTECT(allocVector(INTSXP, n_unique_cols));
196+
SEXP unique_col_numbers = PROTECT(allocVector(INTSXP, n_unique_cols));
197197
int unique_i = 0;
198198
for (int i=0; i<length(is_duplicated); ++i) {
199199
if (!LOGICAL(is_duplicated)[i]) {

0 commit comments

Comments
 (0)