projects
/
pspp-builds.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
REGRESSION: Eliminate restriction to VAR_NAME_LEN in reg_get_name().
[pspp-builds.git]
/
src
/
language
/
stats
/
regression.q
diff --git
a/src/language/stats/regression.q
b/src/language/stats/regression.q
index 8f9979ae73306476c8eec5a6c42105a01a951d7a..b879cae90871658313ac47b76b270474ec6119a3 100644
(file)
--- a/
src/language/stats/regression.q
+++ b/
src/language/stats/regression.q
@@
-1,5
+1,5
@@
/* PSPP - a program for statistical analysis.
/* PSPP - a program for statistical analysis.
- Copyright (C) 2005, 2009 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2009
, 2010, 2011
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
@@
-42,7
+42,8
@@
#include <math/moments.h>
#include <output/tab.h>
#include <math/moments.h>
#include <output/tab.h>
-#include "xalloc.h"
+#include "gl/intprops.h"
+#include "gl/xalloc.h"
#include "gettext.h"
#define _(msgid) gettext (msgid)
#include "gettext.h"
#define _(msgid) gettext (msgid)
@@
-206,7
+207,7
@@
reg_stats_coeff (linreg * c, void *aux_)
tab_double (t, 4, 1, 0, 0.0, NULL);
t_stat = linreg_intercept (c) / std_err;
tab_double (t, 5, 1, 0, t_stat, NULL);
tab_double (t, 4, 1, 0, 0.0, NULL);
t_stat = linreg_intercept (c) / std_err;
tab_double (t, 5, 1, 0, t_stat, NULL);
- pval = 2 * gsl_cdf_tdist_Q (fabs (t_stat),
1.0
);
+ pval = 2 * gsl_cdf_tdist_Q (fabs (t_stat),
(double) (linreg_n_obs (c) - linreg_n_coeffs (c))
);
tab_double (t, 6, 1, 0, pval, NULL);
for (j = 0; j < linreg_n_coeffs (c); j++)
{
tab_double (t, 6, 1, 0, pval, NULL);
for (j = 0; j < linreg_n_coeffs (c); j++)
{
@@
-602,29
+603,19
@@
regression_trns_resid_proc (void *t_, struct ccase **c,
return TRNS_CONTINUE;
}
return TRNS_CONTINUE;
}
-/*
- Returns false if NAME is a duplicate of any existing variable name.
-*/
-static bool
-try_name (const struct dictionary *dict, const char *name)
-{
- if (dict_lookup_var (dict, name) != NULL)
- return false;
-
- return true;
-}
-
-static void
-reg_get_name (const struct dictionary *dict, char name[VAR_NAME_LEN],
- const char prefix[VAR_NAME_LEN])
+static char *
+reg_get_name (const struct dictionary *dict, const char *prefix)
{
{
- int i = 1;
+ char *name;
+ int i;
- snprintf (name, VAR_NAME_LEN, "%s%d", prefix, i);
- while (!try_name (dict, name))
+ /* XXX handle too-long prefixes */
+ name = xmalloc (strlen (prefix) + INT_BUFSIZE_BOUND (i) + 1);
+ for (i = 1; ; i++)
{
{
- i++;
- snprintf (name, VAR_NAME_LEN, "%s%d", prefix, i);
+ sprintf (name, "%s%d", prefix, i);
+ if (dict_lookup_var (dict, name) == NULL)
+ return name;
}
}
}
}
@@
-634,7
+625,7
@@
reg_save_var (struct dataset *ds, const char *prefix, trns_proc_func * f,
{
struct dictionary *dict = dataset_dict (ds);
static int trns_index = 1;
{
struct dictionary *dict = dataset_dict (ds);
static int trns_index = 1;
- char
name[VAR_NAME_LEN]
;
+ char
*name
;
struct variable *new_var;
struct reg_trns *t = NULL;
struct variable *new_var;
struct reg_trns *t = NULL;
@@
-642,9
+633,11
@@
reg_save_var (struct dataset *ds, const char *prefix, trns_proc_func * f,
t->trns_id = trns_index;
t->n_trns = n_trns;
t->c = c;
t->trns_id = trns_index;
t->n_trns = n_trns;
t->c = c;
- reg_get_name (dict, name, prefix);
- new_var = dict_create_var (dict, name, 0);
- assert (new_var != NULL);
+
+ name = reg_get_name (dict, prefix);
+ new_var = dict_create_var_assert (dict, name, 0);
+ free (name);
+
*v = new_var;
add_transformation (ds, f, regression_trns_free, t);
trns_index++;
*v = new_var;
add_transformation (ds, f, regression_trns_free, t);
trns_index++;
@@
-752,10
+745,10
@@
regression_custom_variables (struct lexer *lexer, struct dataset *ds,
{
const struct dictionary *dict = dataset_dict (ds);
{
const struct dictionary *dict = dataset_dict (ds);
- lex_match (lexer,
'='
);
+ lex_match (lexer,
T_EQUALS
);
if ((lex_token (lexer) != T_ID
if ((lex_token (lexer) != T_ID
- || dict_lookup_var (dict, lex_tok
id
(lexer)) == NULL)
+ || dict_lookup_var (dict, lex_tok
cstr
(lexer)) == NULL)
&& lex_token (lexer) != T_ALL)
return 2;
&& lex_token (lexer) != T_ALL)
return 2;
@@
-810,7
+803,7
@@
fill_covariance (gsl_matrix *cov, struct covariance *all_cov,
size_t dep_subscript;
size_t *rows;
const gsl_matrix *ssizes;
size_t dep_subscript;
size_t *rows;
const gsl_matrix *ssizes;
-
const
gsl_matrix *cm;
+ gsl_matrix *cm;
const gsl_matrix *mean_matrix;
const gsl_matrix *ssize_matrix;
double result = 0.0;
const gsl_matrix *mean_matrix;
const gsl_matrix *ssize_matrix;
double result = 0.0;