if (factor.n_vars < 2)
msg (MW, _("Factor analysis on a single variable is not useful."));
+ if (factor.n_vars < 1)
+ {
+ msg (ME, _("Factor analysis without variables is not possible."));
+ goto error;
+ }
+
if (matrix_reader)
{
struct idata *id = idata_alloc (factor.n_vars);
struct idata *idata = idata_alloc (factor->n_vars);
idata->cvm = covariance_1pass_create (factor->n_vars, factor->vars,
- factor->wv, factor->exclude);
+ factor->wv, factor->exclude, true);
for ( ; (c = casereader_read (r) ); case_unref (c))
{
static void
do_factor_by_matrix (const struct cmd_factor *factor, struct idata *idata)
{
+ if (!idata->mm.cov && !idata->mm.corr)
+ {
+ msg (ME, _("The dataset has no complete covariance or correlation matrix."));
+ return;
+ }
+
if (idata->mm.cov && !idata->mm.corr)
idata->mm.corr = correlation_from_covariance (idata->mm.cov, idata->mm.var_matrix);
if (idata->mm.corr && !idata->mm.cov)
if (idata->n_extractions == 0)
{
msg (MW, _("The %s criteria result in zero factors extracted. Therefore no analysis will be performed."), "FACTOR");
- goto finish;
+ return;
}
if (idata->n_extractions > factor->n_vars)
msg (MW,
_("The %s criteria result in more factors than variables, which is not meaningful. No analysis will be performed."),
"FACTOR");
- goto finish;
+ return;
}
{
gsl_vector_free (initial_communalities);
gsl_vector_free (extracted_communalities);
}
-
- finish:
- return;
}