substring() and propagation of names

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

substring() and propagation of names

Hervé Pagès
Hi,

In R < 3.0.0, we used to get:

   > substring(c(A="abcdefghij", B="123456789"), 2, 6:2)
         A       B       A       B       A
   "bcdef"  "2345"   "bcd"    "23"     "b"

But in R >= 3.0.0, we get:

   > substring(c(A="abcdefghij", B="123456789"), 2, 6:2)
   [1] "bcdef" "2345"  "bcd"   "23"    "b"

The names are not propagated anymore.

Is this an intended change or a bug? I can't find anything about
this in the NEWS file. The man page for substring() in R >= 3.0.0
still states:

   Value:

      ...

      For ‘substring’, a character vector of length the longest of the
      arguments.  This will have names taken from ‘x’ (if it has any
      after coercion, repeated as needed), and other attributes copied
      from ‘x’ if it is the longest of the arguments).

Also note that the first argument of substring() is 'text' not 'x'.

Thanks,
H.

--
Hervé Pagès

Program in Computational Biology
Division of Public Health Sciences
Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N, M1-B514
P.O. Box 19024
Seattle, WA 98109-1024

E-mail: [hidden email]
Phone:  (206) 667-5791
Fax:    (206) 667-1319

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

Re: substring() and propagation of names

Hervé Pagès
On 12/13/2013 01:07 AM, Hervé Pagès wrote:

> Hi,
>
> In R < 3.0.0, we used to get:
>
>    > substring(c(A="abcdefghij", B="123456789"), 2, 6:2)
>          A       B       A       B       A
>    "bcdef"  "2345"   "bcd"    "23"     "b"
>
> But in R >= 3.0.0, we get:
>
>    > substring(c(A="abcdefghij", B="123456789"), 2, 6:2)
>    [1] "bcdef" "2345"  "bcd"   "23"    "b"
>
> The names are not propagated anymore.

Looks like a regression introduced at commit 59891 where many functions
were modified to use rep_len() instead of rep() internally. Problem is,
unlike rep(), rep_len() does not propagate the names. Given the number
of files that were touched by this commit, a lot of functions could be
affected. For example complex():

   In R < 3.0.0:

     > complex(modulus=c(a=-1, b=0.77))
            a        b
     -1.00+0i  0.77+0i

   But in R >= 3.0.0:

     > complex(modulus=c(a=-1, b=0.77))
     [1] -1.00+0i  0.77+0i

etc...

Cheers,
H.

>
> Is this an intended change or a bug? I can't find anything about
> this in the NEWS file. The man page for substring() in R >= 3.0.0
> still states:
>
>    Value:
>
>       ...
>
>       For ‘substring’, a character vector of length the longest of the
>       arguments.  This will have names taken from ‘x’ (if it has any
>       after coercion, repeated as needed), and other attributes copied
>       from ‘x’ if it is the longest of the arguments).
>
> Also note that the first argument of substring() is 'text' not 'x'.
>
> Thanks,
> H.
>

--
Hervé Pagès

Program in Computational Biology
Division of Public Health Sciences
Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N, M1-B514
P.O. Box 19024
Seattle, WA 98109-1024

E-mail: [hidden email]
Phone:  (206) 667-5791
Fax:    (206) 667-1319

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