{
struct ll ll;
- union value *value[2];
+ union value value[2];
/* An array of factor metrics, one for each variable */
struct factor_metrics *metrics;
int v;
struct factor_result *result =
ll_data (ll, struct factor_result, ll);
+ int i;
for (v = 0; v < n_dependent_vars; ++v)
{
casereader_destroy (result->metrics[v].up_reader);
}
- free (result->value[0]);
- free (result->value[1]);
+ for (i = 0; i < 2; i++)
+ if (fctr->indep_var[i])
+ value_destroy (&result->value[i],
+ var_get_width (fctr->indep_var[i]));
free (result->metrics);
ll = ll_next (ll);
free (result);
#if 0
ds_put_format (&title, "%s = ", var_get_name (fctr->indep_var[0]));
- var_append_value_name (fctr->indep_var[0], result->value[0], &title);
+ var_append_value_name (fctr->indep_var[0], &result->value[0], &title);
#endif
chart_write_title (ch, ds_cstr (&title));
int v;
int n_extrema = 1;
struct factor_result *result = xzalloc (sizeof (*result));
+ int i;
+
+ for (i = 0; i < 2; i++)
+ if (factor->indep_var[i])
+ value_init (&result->value[i], var_get_width (factor->indep_var[i]));
result->metrics = xcalloc (n_dependent_vars, sizeof (*result->metrics));
if (c != NULL)
{
if ( level > 0)
- {
- result->value[0] =
- value_dup (case_data (c, factor->indep_var[0]),
- var_get_width (factor->indep_var[0]));
-
- if ( level > 1)
- result->value[1] =
- value_dup (case_data (c, factor->indep_var[1]),
- var_get_width (factor->indep_var[1]));
- }
+ for (i = 0; i < 2; i++)
+ if (factor->indep_var[i])
+ value_copy (&result->value[i], case_data (c, factor->indep_var[i]),
+ var_get_width (factor->indep_var[i]));
case_unref (c);
}
struct subcase up_ordering;
subcase_init_var (&up_ordering, dependent_vars[v], SC_ASCEND);
writer = sort_create_writer (&up_ordering,
- casereader_get_value_cnt (reader));
+ casereader_get_proto (reader));
subcase_destroy (&up_ordering);
}
else
/* but in this case, sorting is unnecessary, so an ordinary
casewriter is sufficient */
writer =
- autopaging_writer_create (casereader_get_value_cnt (reader));
+ autopaging_writer_create (casereader_get_proto (reader));
}
/* Sort or just iterate, whilst calculating moments etc */
while ((c = casereader_read (input)) != NULL)
{
- const casenumber loc =
- case_data_idx (c, casereader_get_value_cnt (reader) - 1)->f;
+ int n_vals = caseproto_get_n_widths (casereader_get_proto (reader));
+ const casenumber loc = case_data_idx (c, n_vals - 1)->f;
const double weight = wv ? case_data (c, wv)->f : 1.0;
const union value *value = case_data (c, dependent_vars[v]);
for (v = 0; v < n_dependent_vars; ++v)
{
struct factor_metrics *metric = &result->metrics[v];
+ int n_vals = caseproto_get_n_widths (casereader_get_proto (
+ metric->up_reader));
metric->box_whisker =
box_whisker_create ((struct tukey_hinges *) metric->tukey_hinges,
- cmd->v_id,
- casereader_get_value_cnt (metric->up_reader)
- - 1);
+ cmd->v_id, n_vals - 1);
order_stats_accumulate ((struct order_stats **) &metric->box_whisker,
1,
tbl = tab_create (n_cols, n_rows, 0);
tab_headers (tbl, heading_columns, 0, heading_rows, 0);
- tab_dim (tbl, tab_natural_dimensions);
+ tab_dim (tbl, tab_natural_dimensions, NULL);
/* Outline the box */
tab_box (tbl,
{
int j = 0;
struct ll *ll;
- union value *last_value = NULL;
+ const union value *last_value = NULL;
if ( v > 0 )
tab_hline (tbl, TAL_1, 0, n_cols -1 ,
{
if ( last_value == NULL ||
- compare_values_short (last_value, result->value[0],
- fctr->indep_var[0]))
+ !value_equal (last_value, &result->value[0],
+ var_get_width (fctr->indep_var[0])))
{
struct string str;
- last_value = result->value[0];
+ last_value = &result->value[0];
ds_init_empty (&str);
- var_append_value_name (fctr->indep_var[0], result->value[0],
+ var_append_value_name (fctr->indep_var[0], &result->value[0],
&str);
tab_text (tbl, 1,
ds_init_empty (&str);
var_append_value_name (fctr->indep_var[1],
- result->value[1], &str);
+ &result->value[1], &str);
tab_text (tbl, 2,
heading_rows + j +
TAB_LEFT,
n, wfmt);
- tab_text (tbl, heading_columns + 1,
- heading_rows + j + v * ll_count (&fctr->result_list),
- TAB_RIGHT | TAT_PRINTF,
- "%g%%", n * 100.0 / result->metrics[v].n);
+ tab_text_format (tbl, heading_columns + 1,
+ heading_rows + j + v * ll_count (&fctr->result_list),
+ TAB_RIGHT,
+ "%g%%", n * 100.0 / result->metrics[v].n);
/* Total Missing */
tab_double (tbl, heading_columns + 2,
result->metrics[v].n - n,
wfmt);
- tab_text (tbl, heading_columns + 3,
- heading_rows + j + v * ll_count (&fctr->result_list),
- TAB_RIGHT | TAT_PRINTF,
- "%g%%",
- (result->metrics[v].n - n) * 100.0 / result->metrics[v].n
- );
+ tab_text_format (tbl, heading_columns + 3,
+ heading_rows + j + v * ll_count (&fctr->result_list),
+ TAB_RIGHT,
+ "%g%%",
+ (result->metrics[v].n - n) * 100.0 / result->metrics[v].n
+ );
/* Total Valid + Missing */
tab_double (tbl, heading_columns + 4,
result->metrics[v].n,
wfmt);
- tab_text (tbl, heading_columns + 5,
- heading_rows + j + v * ll_count (&fctr->result_list),
- TAB_RIGHT | TAT_PRINTF,
- "%g%%",
- (result->metrics[v].n) * 100.0 / result->metrics[v].n
- );
+ tab_text_format (tbl, heading_columns + 5,
+ heading_rows + j + v * ll_count (&fctr->result_list),
+ TAB_RIGHT,
+ "%g%%",
+ ((result->metrics[v].n) * 100.0
+ / result->metrics[v].n));
++j;
}
tbl = tab_create (n_cols, n_rows, 0);
tab_headers (tbl, heading_columns, 0, heading_rows, 0);
- tab_dim (tbl, tab_natural_dimensions);
+ tab_dim (tbl, tab_natural_dimensions, NULL);
/* Outline the box */
tab_box (tbl,
struct string vstr;
ds_init_empty (&vstr);
var_append_value_name (fctr->indep_var[0],
- result->value[0], &vstr);
+ &result->value[0], &vstr);
tab_text (tbl, 1,
heading_rows + row_var_start + i * DESCRIPTIVE_ROWS,
TAB_LEFT,
_("Mean"));
- tab_text (tbl, n_cols - 4,
- heading_rows + row_var_start + 1 + i * DESCRIPTIVE_ROWS,
- TAB_LEFT | TAT_PRINTF,
- _("%g%% Confidence Interval for Mean"),
- cmd.n_cinterval[0]);
+ tab_text_format (tbl, n_cols - 4,
+ heading_rows + row_var_start + 1 + i * DESCRIPTIVE_ROWS,
+ TAB_LEFT,
+ _("%g%% Confidence Interval for Mean"),
+ cmd.n_cinterval[0]);
tab_text (tbl, n_cols - 3,
heading_rows + row_var_start + 1 + i * DESCRIPTIVE_ROWS,
_("Upper Bound"));
tab_text (tbl, n_cols - 4,
- heading_rows + row_var_start + 3 + i * DESCRIPTIVE_ROWS,
- TAB_LEFT | TAT_PRINTF,
- _("5%% Trimmed Mean"));
+ heading_rows + row_var_start + 3 + i * DESCRIPTIVE_ROWS,
+ TAB_LEFT, _("5% Trimmed Mean"));
tab_text (tbl, n_cols - 4,
heading_rows + row_var_start + 4 + i * DESCRIPTIVE_ROWS,
tbl = tab_create (n_cols, n_rows, 0);
tab_headers (tbl, heading_columns, 0, heading_rows, 0);
- tab_dim (tbl, tab_natural_dimensions);
+ tab_dim (tbl, tab_natural_dimensions, NULL);
/* Outline the box */
tab_box (tbl,
for ( e = 1; e <= cmd.st_n; ++e )
{
- tab_text (tbl, n_cols - 3,
- heading_rows + row_var_start + row_result_start + e - 1,
- TAB_RIGHT | TAT_PRINTF,
- _("%d"), e);
-
- tab_text (tbl, n_cols - 3,
- heading_rows + row_var_start + row_result_start + cmd.st_n + e - 1,
- TAB_RIGHT | TAT_PRINTF,
- _("%d"), e);
+ tab_text_format (tbl, n_cols - 3,
+ heading_rows + row_var_start + row_result_start + e - 1,
+ TAB_RIGHT,
+ "%d", e);
+
+ tab_text_format (tbl, n_cols - 3,
+ heading_rows + row_var_start + row_result_start + cmd.st_n + e - 1,
+ TAB_RIGHT,
+ "%d", e);
}
struct string vstr;
ds_init_empty (&vstr);
var_append_value_name (fctr->indep_var[0],
- result->value[0], &vstr);
+ &result->value[0], &vstr);
tab_text (tbl, 1,
heading_rows + row_var_start + row_result_start,
tbl = tab_create (n_cols, n_rows, 0);
tab_headers (tbl, heading_columns, 0, heading_rows, 0);
- tab_dim (tbl, tab_natural_dimensions);
+ tab_dim (tbl, tab_natural_dimensions, NULL);
/* Outline the box */
tab_box (tbl,
struct string vstr;
ds_init_empty (&vstr);
var_append_value_name (fctr->indep_var[0],
- result->value[0], &vstr);
+ &result->value[0], &vstr);
tab_text (tbl, 1,
heading_rows + row_var_start + i * PERCENTILE_ROWS,
for (i = 0 ; i < n_percentiles; ++i )
{
- tab_text (tbl, n_cols - n_percentiles + i, 1,
- TAB_CENTER | TAT_TITLE | TAT_PRINTF,
- _("%g"),
- subc_list_double_at (&percentile_list, i)
- );
+ tab_text_format (tbl, n_cols - n_percentiles + i, 1,
+ TAB_CENTER | TAT_TITLE,
+ _("%g"),
+ subc_list_double_at (&percentile_list, i));
}
{
if (fctr->indep_var[0])
{
- var_append_value_name (fctr->indep_var[0], result->value[0], str);
+ var_append_value_name (fctr->indep_var[0], &result->value[0], str);
if ( fctr->indep_var[1] )
{
ds_put_cstr (str, ",");
- var_append_value_name (fctr->indep_var[1], result->value[1], str);
+ var_append_value_name (fctr->indep_var[1], &result->value[1], str);
ds_put_cstr (str, ")");
}
{
ds_put_format (str, "(%s = ", var_get_name (fctr->indep_var[0]));
- var_append_value_name (fctr->indep_var[0], result->value[0], str);
+ var_append_value_name (fctr->indep_var[0], &result->value[0], str);
if ( fctr->indep_var[1] )
{
ds_put_cstr (str, ",");
ds_put_format (str, "%s = ", var_get_name (fctr->indep_var[1]));
- var_append_value_name (fctr->indep_var[1], result->value[1], str);
+ var_append_value_name (fctr->indep_var[1], &result->value[1], str);
}
ds_put_cstr (str, ")");
}