formatting raw vectors with names

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

formatting raw vectors with names

Lukas Stadler
I think there’s a bug concerning the formatting of raw vectors with names:

> structure(as.raw(1:3), .Names = c("a", "bbbb", "c"))
   a bbbb    c
01 02 03
> structure(1:3, .Names = c("a", "bbbb", "c"))
   a bbbb    c
   1    2    3

The problem is that EncodeRaw does not honor the requested width, in fact it doesn’t even get the width as a parameter.
An easy fix would be to change:

static void printNamedRawVector(Rbyte * x, int n, SEXP * names)
    PRINT_N_VECTOR(formatRaw(x, n, &w),
                   Rprintf("%s%*s", EncodeRaw(x[k], ""), R_print.gap,""))

to

static void printNamedRawVector(Rbyte * x, int n, SEXP * names)
    PRINT_N_VECTOR(formatRaw(x, n, &w),
                   Rprintf("%*s%s%*s", w - 2, "", EncodeRaw(x[k], ""), R_print.gap,""))

in printvector.c:314.

- Lukas
______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|

Re: formatting raw vectors with names

Martin Maechler
>>>>> Lukas Stadler <[hidden email]>
>>>>>     on Thu, 9 Nov 2017 16:34:49 +0100 writes:

    > I think there’s a bug concerning the formatting of raw vectors with names:
    >> structure(as.raw(1:3), .Names = c("a", "bbbb", "c"))
    > a bbbb    c
    > 01 02 03
    >> structure(1:3, .Names = c("a", "bbbb", "c"))
    > a bbbb    c
    > 1    2    3

    > The problem is that EncodeRaw does not honor the requested width, in fact it doesn’t even get the width as a parameter.
    > An easy fix would be to change:

    > static void printNamedRawVector(Rbyte * x, int n, SEXP * names)
    >    PRINT_N_VECTOR(formatRaw(x, n, &w),
    >                   Rprintf("%s%*s", EncodeRaw(x[k], ""), R_print.gap,""))

    > to

    > static void printNamedRawVector(Rbyte * x, int n, SEXP * names)
    >    PRINT_N_VECTOR(formatRaw(x, n, &w),
    >                   Rprintf("%*s%s%*s", w - 2, "", EncodeRaw(x[k], ""), R_print.gap,""))

    > in printvector.c:314.

Thank you, Lukas,

all you show and say seems very convincing to me,
notably the fix as well.

I'll deal with this, after a little testing.
If the effect is small in "package - space", it may be ported to
R-patched to become R 3.4.3  in three weeks.

Martin

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel