projects
/
pspp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
FREQUENCIES: Fix the default /STATISTICS.
[pspp]
/
src
/
language
/
stats
/
quick-cluster.c
diff --git
a/src/language/stats/quick-cluster.c
b/src/language/stats/quick-cluster.c
index 10572cee5e260a8a1590c56742489586741f1053..68b50123144e2b0b10c19d494d2e4b02b32ac430 100644
(file)
--- a/
src/language/stats/quick-cluster.c
+++ b/
src/language/stats/quick-cluster.c
@@
-1,5
+1,5
@@
/* PSPP - a program for statistical analysis.
/* PSPP - a program for statistical analysis.
- Copyright (C) 2011 Free Software Foundation, Inc.
+ Copyright (C) 2011
, 2012
Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@
-227,11
+227,12
@@
kmeans_recalculate_centers (struct Kmeans *kmeans, const struct casereader *read
{
const union value *val = case_data (c, qc->vars[v]);
double x = val->f * weight;
{
const union value *val = case_data (c, qc->vars[v]);
double x = val->f * weight;
+ double curval;
if ( var_is_value_missing (qc->vars[v], val, qc->exclude))
continue;
if ( var_is_value_missing (qc->vars[v], val, qc->exclude))
continue;
-
double
curval = gsl_matrix_get (kmeans->centers, index, v);
+ curval = gsl_matrix_get (kmeans->centers, index, v);
gsl_matrix_set (kmeans->centers, index, v, curval + x);
}
i++;
gsl_matrix_set (kmeans->centers, index, v, curval + x);
}
i++;
@@
-389,11
+390,10
@@
static void
quick_cluster_show_centers (struct Kmeans *kmeans, bool initial, const struct qc *qc)
{
struct tab_table *t;
quick_cluster_show_centers (struct Kmeans *kmeans, bool initial, const struct qc *qc)
{
struct tab_table *t;
- int nc, nr,
heading_columns,
currow;
+ int nc, nr, currow;
int i, j;
nc = qc->ngroups + 1;
nr = qc->n_vars + 4;
int i, j;
nc = qc->ngroups + 1;
nr = qc->n_vars + 4;
- heading_columns = 1;
t = tab_create (nc, nr);
tab_headers (t, 0, nc - 1, 0, 1);
currow = 0;
t = tab_create (nc, nr);
tab_headers (t, 0, nc - 1, 0, 1);
currow = 0;
@@
-432,14
+432,14
@@
quick_cluster_show_centers (struct Kmeans *kmeans, bool initial, const struct qc
tab_double (t, i + 1, j + 4, TAB_CENTER,
gsl_matrix_get (kmeans->centers,
kmeans->group_order->data[i], j),
tab_double (t, i + 1, j + 4, TAB_CENTER,
gsl_matrix_get (kmeans->centers,
kmeans->group_order->data[i], j),
- var_get_print_format (qc->vars[j]));
+ var_get_print_format (qc->vars[j])
, RC_OTHER
);
}
else
{
tab_double (t, i + 1, j + 4, TAB_CENTER,
gsl_matrix_get (kmeans->initial_centers,
kmeans->group_order->data[i], j),
}
else
{
tab_double (t, i + 1, j + 4, TAB_CENTER,
gsl_matrix_get (kmeans->initial_centers,
kmeans->group_order->data[i], j),
- var_get_print_format (qc->vars[j]));
+ var_get_print_format (qc->vars[j])
, RC_OTHER
);
}
}
}
}
}
}
@@
-528,6
+528,10
@@
cmd_quick_cluster (struct lexer *lexer, struct dataset *ds)
{
qc.exclude = MV_SYSTEM;
}
{
qc.exclude = MV_SYSTEM;
}
+ else if (lex_match_id (lexer, "EXCLUDE"))
+ {
+ qc.exclude = MV_ANY;
+ }
else
goto error;
}
else
goto error;
}
@@
-544,6
+548,11
@@
cmd_quick_cluster (struct lexer *lexer, struct dataset *ds)
{
lex_force_int (lexer);
qc.ngroups = lex_integer (lexer);
{
lex_force_int (lexer);
qc.ngroups = lex_integer (lexer);
+ if (qc.ngroups <= 0)
+ {
+ lex_error (lexer, _("The number of clusters must be positive"));
+ goto error;
+ }
lex_get (lexer);
lex_force_match (lexer, T_RPAREN);
}
lex_get (lexer);
lex_force_match (lexer, T_RPAREN);
}
@@
-554,6
+563,11
@@
cmd_quick_cluster (struct lexer *lexer, struct dataset *ds)
{
lex_force_int (lexer);
qc.maxiter = lex_integer (lexer);
{
lex_force_int (lexer);
qc.maxiter = lex_integer (lexer);
+ if (qc.maxiter <= 0)
+ {
+ lex_error (lexer, _("The number of iterations must be positive"));
+ goto error;
+ }
lex_get (lexer);
lex_force_match (lexer, T_RPAREN);
}
lex_get (lexer);
lex_force_match (lexer, T_RPAREN);
}