On Thu, 8 Nov 2012, Hélio Guilherme wrote:

> Testing the examples added by Henrique to help of colnames and
> rownames functions, I get different outputs for the M matrix:
> ?          matrix M = {1,2;2,1;4,1}
> matrix M = {1,2;2,1;4,1}
> Matriz M gerada
> ?          rownames(M, "Row1 Row2 Row3")
> rownames(M, "Row1 Row2 Row3")
> ?          print M
> print M
> M (3 x 2)
>
> Row1   1   2
> Row2   2   1
> Row3   4   1
>
> ? colnames(M, "Col1 Col2")
> colnames(M, "Col1 Col2")
> ?          print M
> print M
> M (3 x 2)
>
>             Col1         Col2
> Row1       1,0000       2,0000
> Row2       2,0000       1,0000
> Row3       4,0000       1,0000
>
> This is not a big problem but maybe we should have some control on the
> matrix elements numeric types (or at least consistency ;)). See ahead
> that is the colnames setting the numbers to float.

I'll take a look at the code on that. As for the points 
regarding printf below, I think you're not fully understanding 
how the "%f" and "%g" formats are supposed to work. Some 
details follow.

> In the following experimentation with printf, there are missing
> separators within the matrix elements (output is using decimal commas
> since is the PT version):
>
> ? matrix M = {1,2;2,1;4,1}
> matrix M = {1,2;2,1;4,1}
> Matriz M gerada
> ? printf "%d", M
> 12
> 21
> 41
> ? printf "%0.3g", M
> 12
> 21
> 41
> ? printf "%0.3f", M
> 1,0002,000
> 2,0001,000
> 4,0001,000

When you use printf for matrices, you have to take charge of 
the column width, using the width specifier as well as the 
precision specifier. (In fact, above you're specifying a width 
of 0.) A suitable format for this matrix would be "%6.3f" (or 
increase the width for greater separation of the columns).

> Needs a fix:
> ? printf "%1.4g", N
> 1,0012,002
> 2,0021,001
> 4,0041,001
> ?
> Note that did not consider the requested 4 decimals.

With the format "%1.4g" you are requesting that the numbers be 
printed with precision 4 -- and with 'g' that means 4 
significant figures, not 4 decimal places -- but with width of 
only 1. You should use something like "%6.4g" (with a width of 
at least 6).

To be explicit, with both %f and %g, if you give a width 
specification that is narrower than the width of the number as 
printed according to the stated precision, it cannot be 
honored, but the effect is that there is no "padding" around 
the number -- so matrix columns will run into each other. (In 
addition, if you give no width specification, as in "%.3f", 
the numbers are again printed without any padding.)

Allin Cottrell

Reply via email to