Gabriel Becker
2020-May-22 10:00 UTC
[Rd] paste(character(0), collapse="", recycle0=FALSE) should be ""
Hi Martin et al, On Thu, May 21, 2020 at 9:42 AM Martin Maechler <maechler at stat.math.ethz.ch> wrote:> >>>>> Herv? Pag?s > >>>>> on Fri, 15 May 2020 13:44:28 -0700 writes: > > > There is still the situation where **both** 'sep' and 'collapse' are > > specified: > > >> paste(integer(0), "nth", sep="", collapse=",") > > [1] "nth" > > > In that case 'recycle0' should **not** be ignored i.e. > > > paste(integer(0), "nth", sep="", collapse=",", recycle0=TRUE) > > > should return the empty string (and not character(0) like it does at > the > > moment). > > > In other words, 'recycle0' should only control the first operation > (the > > operation controlled by 'sep'). Which makes plenty of sense: the 1st > > operation is binary (or n-ary) while the collapse operation is > unary. > > There is no concept of recycling in the context of unary operations. > > Interesting, ..., and sounding somewhat convincing. > > > On 5/15/20 11:25, Gabriel Becker wrote: > >> Hi all, > >> > >> This makes sense to me, but I would think that recycle0 and > collapse > >> should actually be incompatible and paste should throw an error if > >> recycle0 were TRUE and collapse were declared in the same call. I > don't > >> think the value of recycle0 should be silently ignored if it is > actively > >> specified. > >> > >> ~G > > Just to summarize what I think we should know and agree (or be > be "disproven") and where this comes from ... > > 1) recycle0 is a new R 4.0.0 option in paste() / paste0() which by default > (recycle0 = FALSE) should (and *does* AFAIK) not change anything, > hence paste() / paste0() behave completely back-compatible > if recycle0 is kept to FALSE. > > 2) recycle0 = TRUE is meant to give different behavior, notably > 0-length arguments (among '...') should result in 0-length results. > > The above does not specify what this means in detail, see 3) > > 3) The current R 4.0.0 implementation (for which I'm primarily responsible) > and help(paste) are in accordance. > Notably the help page (Arguments -> 'recycle0' ; Details 1st para ; > Examples) > says and shows how the 4.0.0 implementation has been meant to work. > > 4) Several provenly smart members of the R community argue that > both the implementation and the documentation of 'recycle0 > TRUE' should be changed to be more logical / coherent / sensical .. > > Is the above all correct in your view? > > Assuming yes, I read basically two proposals, both agreeing > that recycle0 = TRUE should only ever apply to the action of 'sep' > but not the action of 'collapse'. > > 1) Bill and Herv? (I think) propose that 'recycle0' should have > no effect whenever 'collapse = <string>' > > 2) Gabe proposes that 'collapse = <string>' and 'recycle0 = TRUE' > should be declared incompatible and error. If going in that > direction, I could also see them to give a warning (and > continue as if recycle = FALSE). >Herve makes a good point about when sep and collapse are both set. That said, if the user explicitly sets recycle0, Personally, I don't think it should be silently ignored under any configuration of other arguments. If all of the arguments are to go into effect, the question then becomes one of ordering, I think. Consider paste(c("a", "b"), NULL, c("c", "d"), sep = " ", collapse = ",", recycle0=TRUE) Currently that returns character(0), becuase the logic is essenttially (in pseudo-code) collapse(paste(c("a", "b"), NULL, c("c", "d"), sep = " ", recycle0=TRUE), collapse = ", ", recycle0=TRUE) -> collapse(character(0), collapse = ", " recycle0=TRUE) -> character(0) Now Bill Dunlap argued, fairly convincingly I think, that paste(..., collapse=<string>) should *always* return a character vector of length exactly one. With recycle0, though, it will return "" via the progression paste(c("a", "b"), NULL, c("c", "d"), sep = " ", collapse = ",", recycle0=TRUE) -> collapse(character(0), collapse = ", ") -> "" because recycle0 is still applied to the sep-based operation which occurs before collapse, thus leaving a vector of length 0 to collapse. That is consistent but seems unlikely to be what the user wanted, imho. I think if it does this there should be at least a warning when paste collapses to "" this way, if it is allowed at all (ie if mixing collapse=<string> and recycle0=TRUE is not simply made an error). I would like to hear others' thoughts as well though. @Pages, Herve <hpages at fredhutch.org> @William Dunlap <wdunlap at tibco.com> is "" what you envision as thee desired and useful behavior there? Best, ~G> I have not yet my mind up but would tend to agree to "you guys", > but I think that other R Core members should chime in, too. > > Martin > > >> On Fri, May 15, 2020 at 11:05 AM Herv? Pag?s <hpages at fredhutch.org > >> <mailto:hpages at fredhutch.org>> wrote: > >> > >> Totally agree with that. > >> > >> H. > >> > >> On 5/15/20 10:34, William Dunlap via R-devel wrote: > >> > I agree: paste(collapse="something", ...) should always return a > >> single > >> > character string, regardless of the value of recycle0. This > would be > >> > similar to when there are no non-NULL arguments to paste; > >> collapse="." > >> > gives a single empty string and collapse=NULL gives a zero long > >> character > >> > vector. > >> >> paste() > >> > character(0) > >> >> paste(collapse=", ") > >> > [1] "" > >> > > >> > Bill Dunlap > >> > TIBCO Software > >> > wdunlap tibco.com > >> < > https://urldefense.proofpoint.com/v2/url?u=http-3A__tibco.com&d=DwMFaQ&c=eRAMFD45gAfqt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=cC2qctlVXd0qHMPvCyYvuVMqR8GU3DjTTqKJ0zjIFj8&s=rXIwWqf4U4HZS_bjUT3KfA9ARaV5YTb_kEcXWHnkt-c&e> > > >> > > >> > > >> > On Thu, Apr 30, 2020 at 9:56 PM suharto_anggono--- via R-devel < > >> > r-devel at r-project.org <mailto:r-devel at r-project.org>> wrote: > >> > > >> >> Without 'collapse', 'paste' pastes (concatenates) its arguments > >> >> elementwise (separated by 'sep', " " by default). New in R devel > >> and R > >> >> patched, specifying recycle0 = FALSE makes mixing zero-length and > >> >> nonzero-length arguments results in length zero. The result of > >> paste(n, > >> >> "th", sep = "", recycle0 = FALSE) always have the same length as > >> 'n'. > >> >> Previously, the result is still as long as the longest argument, > >> with the > >> >> zero-length argument like "". If all og the arguments have > >> length zero, > >> >> 'recycle0' doesn't matter. > >> >> > >> >> As far as I understand, 'paste' with 'collapse' as a character > >> string is > >> >> supposed to put together elements of a vector into a single > >> character > >> >> string. I think 'recycle0' shouldn't change it. > >> >> > >> >> In current R devel and R patched, paste(character(0), collapse > "", > >> >> recycle0 = FALSE) is character(0). I think it should be "", like > >> >> paste(character(0), collapse=""). > >> >> > >> >> paste(c("4", "5"), "th", sep = "", collapse = ", ", recycle0 > >> FALSE) > >> >> is > >> >> "4th, 5th". > >> >> paste(c("4" ), "th", sep = "", collapse = ", ", recycle0 > >> FALSE) > >> >> is > >> >> "4th". > >> >> I think > >> >> paste(c( ), "th", sep = "", collapse = ", ", recycle0 > >> FALSE) > >> >> should be > >> >> "", > >> >> not character(0). > >> >> > >> >> ______________________________________________ > >> >> R-devel at r-project.org <mailto:R-devel at r-project.org> mailing > list > >> >> > >> > https://urldefense.proofpoint.com/v2/url?u=https-3A__stat.ethz.ch_mailman_listinfo_r-2Ddevel&d=DwICAg&c=eRAMFD45gAfqt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=776IovW06eUHr1EDrabHLY7F47rU9CCUEItSDI96zc0&s=xN84DhkZeoxzn6SG0QTMpOGg2w_ThmjZmZymGUuD0Uw&e> >> >> > >> > > >> > [[alternative HTML version deleted]] > >> > > >> > ______________________________________________ > >> > R-devel at r-project.org <mailto:R-devel at r-project.org> mailing list > >> > > >> > https://urldefense.proofpoint.com/v2/url?u=https-3A__stat.ethz.ch_mailman_listinfo_r-2Ddevel&d=DwICAg&c=eRAMFD45gAfqt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=776IovW06eUHr1EDrabHLY7F47rU9CCUEItSDI96zc0&s=xN84DhkZeoxzn6SG0QTMpOGg2w_ThmjZmZymGUuD0Uw&e> >> > > >> > >> -- > >> 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: hpages at fredhutch.org <mailto:hpages at fredhutch.org> > >> Phone: (206) 667-5791 > >> Fax: (206) 667-1319 > >> > >> ______________________________________________ > >> R-devel at r-project.org <mailto:R-devel at r-project.org> mailing list > >> https://stat.ethz.ch/mailman/listinfo/r-devel > >> < > https://urldefense.proofpoint.com/v2/url?u=https-3A__stat.ethz.ch_mailman_listinfo_r-2Ddevel&d=DwMFaQ&c=eRAMFD45gAfqt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=cC2qctlVXd0qHMPvCyYvuVMqR8GU3DjTTqKJ0zjIFj8&s=COnDeGgHNnHJlLLZOznMlhcaFU1nIRlkaSbssvlrMvw&e> > > >> > > > -- > > 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: hpages at fredhutch.org > > Phone: (206) 667-5791 > > Fax: (206) 667-1319 > > > ______________________________________________ > > R-devel at r-project.org mailing list > > https://stat.ethz.ch/mailman/listinfo/r-devel >[[alternative HTML version deleted]]
Hervé Pagès
2020-May-22 16:12 UTC
[Rd] paste(character(0), collapse="", recycle0=FALSE) should be ""
I think that
paste(c("a", "b"), NULL, c("c",
"d"), sep = " ", collapse = ",",
recycle0=TRUE)
should just return an empty string and don't see why it needs to emit a
warning or raise an error. To me it does exactly what the user is asking
for, which is to change how the 3 arguments are recycled **before** the
'sep' operation.
The 'recycle0' argument has no business in the 'collapse'
operation
(which comes after the 'sep' operation): this operation still behaves
like it always had.
That's all there is to it.
H.
On 5/22/20 03:00, Gabriel Becker wrote:> Hi Martin et al,
>
>
>
> On Thu, May 21, 2020 at 9:42 AM Martin Maechler
> <maechler at stat.math.ethz.ch <mailto:maechler at
stat.math.ethz.ch>> wrote:
>
> >>>>> Herv? Pag?s
> >>>>>? ? ?on Fri, 15 May 2020 13:44:28 -0700 writes:
>
> ? ? > There is still the situation where **both** 'sep' and
> 'collapse' are
> ? ? > specified:
>
> ? ? >> paste(integer(0), "nth", sep="",
collapse=",")
> ? ? > [1] "nth"
>
> ? ? > In that case 'recycle0' should **not** be ignored
i.e.
>
> ? ? > paste(integer(0), "nth", sep="",
collapse=",", recycle0=TRUE)
>
> ? ? > should return the empty string (and not character(0) like it
> does at the
> ? ? > moment).
>
> ? ? > In other words, 'recycle0' should only control the
first
> operation (the
> ? ? > operation controlled by 'sep'). Which makes plenty of
sense:
> the 1st
> ? ? > operation is binary (or n-ary) while the collapse operation
> is unary.
> ? ? > There is no concept of recycling in the context of unary
> operations.
>
> Interesting, ..., and sounding somewhat convincing.
>
> ? ? > On 5/15/20 11:25, Gabriel Becker wrote:
> ? ? >> Hi all,
> ? ? >>
> ? ? >> This makes sense to me, but I would think that recycle0
and
> collapse
> ? ? >> should actually be incompatible and paste should throw an
> error if
> ? ? >> recycle0 were TRUE and collapse were declared in the same
> call. I don't
> ? ? >> think the value of recycle0 should be silently ignored if
it
> is actively
> ? ? >> specified.
> ? ? >>
> ? ? >> ~G
>
> Just to summarize what I think we should know and agree (or be
> be "disproven") and where this comes from ...
>
> 1) recycle0 is a new R 4.0.0 option in paste() / paste0() which by
> default
> ? ?(recycle0 = FALSE) should (and *does* AFAIK) not change anything,
> ? ?hence? paste() / paste0() behave completely back-compatible
> ? ?if recycle0 is kept to FALSE.
>
> 2) recycle0 = TRUE is meant to give different behavior, notably
> ? ?0-length arguments (among '...') should result in 0-length
results.
>
> ? ?The above does not specify what this means in detail, see 3)
>
> 3) The current R 4.0.0 implementation (for which I'm primarily
> responsible)
> ? ?and help(paste)? are in accordance.
> ? ?Notably the help page (Arguments -> 'recycle0' ; Details
1st
> para ; Examples)
> ? ?says and shows how the 4.0.0 implementation has been meant to work.
>
> 4) Several provenly smart members of the R community argue that
> ? ?both the implementation and the documentation of 'recycle0 >
? ?TRUE'? should be changed to be more logical / coherent / sensical ..
>
> Is the above all correct in your view?
>
> Assuming yes,? I read basically two proposals, both agreeing
> that? recycle0 = TRUE? should only ever apply to the action of
'sep'
> but not the action of 'collapse'.
>
> 1) Bill and Herv? (I think) propose that 'recycle0' should have
> ? ?no effect whenever? 'collapse = <string>'
>
> 2) Gabe proposes that 'collapse = <string>' and
'recycle0 = TRUE'
> ? ?should be declared incompatible and error. If going in that
> ? ?direction, I could also see them to give a warning (and
> ? ?continue as if recycle = FALSE).
>
>
> Herve makes a good point about when sep and collapse are both set. That
> said, if the user explicitly sets recycle0, Personally, I don't think
it
> should be silently ignored under any configuration of other arguments.
>
> If all of the arguments are to go into effect, the question then becomes
> one of ordering, I think.
>
> Consider
>
> paste(c("a", "b"), NULL, c("c",?
"d"),? sep = " ", collapse = ",",
> recycle0=TRUE)
>
> Currently that returns character(0), becuase?the logic is
> essenttially?(in pseudo-code)
>
> collapse(paste(c("a", "b"), NULL, c("c",?
"d"),? sep = " ",
> recycle0=TRUE), collapse = ", ", recycle0=TRUE)
>
> ? ? ?-> collapse(character(0), collapse = ", "?recycle0=TRUE)
>
> -> character(0)
>
> Now Bill Dunlap argued, fairly convincingly I think, that paste(...,
> collapse=<string>) should /always/?return a character vector of
length
> exactly one. With recycle0, though,??it will return "" via the
progression
>
> paste(c("a", "b"), NULL, c("c",?
"d"),? sep = " ", collapse = ",",
> recycle0=TRUE)
>
> ? ? ?-> collapse(character(0),?collapse = ", ")
>
> -> ""
>
>
> because recycle0 is still applied to the sep-based operation which
> occurs before collapse, thus leaving a vector of length?0 to collapse.
>
> That is consistent but seems unlikely to be what the user wanted, imho.
> I think if it does this there should be at least a warning when paste
> collapses to "" this way, if it is allowed at all (ie if mixing
> collapse=<string>and recycle0=TRUEis not simply made an error).
>
> I would like to hear others' thoughts as well though. @Pages, Herve
> <mailto:hpages at fredhutch.org> @William Dunlap
> <mailto:wdunlap at tibco.com>?is "" what you envision as
thee desired and
> useful behavior there?
>
> Best,
> ~G
>
>
>
> I have not yet my mind up but would tend to agree to "you
guys",
> but I think that other R Core members should chime in, too.
>
> Martin
>
> ? ? >> On Fri, May 15, 2020 at 11:05 AM Herv? Pag?s
> <hpages at fredhutch.org <mailto:hpages at fredhutch.org>
> ? ? >> <mailto:hpages at fredhutch.org <mailto:hpages at
fredhutch.org>>>
> wrote:
> ? ? >>
> ? ? >> Totally agree with that.
> ? ? >>
> ? ? >> H.
> ? ? >>
> ? ? >> On 5/15/20 10:34, William Dunlap via R-devel wrote:
> ? ? >> > I agree: paste(collapse="something", ...)
should always
> return a
> ? ? >> single
> ? ? >> > character string, regardless of the value of
recycle0.
> This would be
> ? ? >> > similar to when there are no non-NULL arguments to
paste;
> ? ? >> collapse="."
> ? ? >> > gives a single empty string and collapse=NULL gives
a zero
> long
> ? ? >> character
> ? ? >> > vector.
> ? ? >> >> paste()
> ? ? >> > character(0)
> ? ? >> >> paste(collapse=", ")
> ? ? >> > [1] ""
> ? ? >> >
> ? ? >> > Bill Dunlap
> ? ? >> > TIBCO Software
> ? ? >> > wdunlap tibco.com
>
<https://urldefense.proofpoint.com/v2/url?u=http-3A__tibco.com&d=DwMFaQ&c=eRAMFD45gAfqt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=q5ueyHReS5hHK6TZ0dJ1N7Ro8dx-rsLHys8GrCugOls&s=o9ozvxBK-kVvAUFro7U1RrI5w0U8EPb0uyjQwMvOpt8&e=>
> ? ? >>
>
<https://urldefense.proofpoint.com/v2/url?u=http-3A__tibco.com&d=DwMFaQ&c=eRAMFD45gAfqt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=cC2qctlVXd0qHMPvCyYvuVMqR8GU3DjTTqKJ0zjIFj8&s=rXIwWqf4U4HZS_bjUT3KfA9ARaV5YTb_kEcXWHnkt-c&e=>
> ? ? >> >
> ? ? >> >
> ? ? >> > On Thu, Apr 30, 2020 at 9:56 PM suharto_anggono---
via
> R-devel <
> ? ? >> > r-devel at r-project.org <mailto:r-devel at
r-project.org>
> <mailto:r-devel at r-project.org <mailto:r-devel at
r-project.org>>> wrote:
> ? ? >> >
> ? ? >> >> Without 'collapse', 'paste'
pastes (concatenates) its
> arguments
> ? ? >> >> elementwise (separated by 'sep', "
" by default). New in
> R devel
> ? ? >> and R
> ? ? >> >> patched, specifying recycle0 = FALSE makes
mixing
> zero-length and
> ? ? >> >> nonzero-length arguments results in length zero.
The
> result of
> ? ? >> paste(n,
> ? ? >> >> "th", sep = "", recycle0 =
FALSE) always have the same
> length as
> ? ? >> 'n'.
> ? ? >> >> Previously, the result is still as long as the
longest
> argument,
> ? ? >> with the
> ? ? >> >> zero-length argument like "". If all
og the arguments have
> ? ? >> length zero,
> ? ? >> >> 'recycle0' doesn't matter.
> ? ? >> >>
> ? ? >> >> As far as I understand, 'paste' with
'collapse' as a
> character
> ? ? >> string is
> ? ? >> >> supposed to put together elements of a vector
into a single
> ? ? >> character
> ? ? >> >> string. I think 'recycle0' shouldn't
change it.
> ? ? >> >>
> ? ? >> >> In current R devel and R patched,
paste(character(0),
> collapse = "",
> ? ? >> >> recycle0 = FALSE) is character(0). I think it
should be
> "", like
> ? ? >> >> paste(character(0), collapse="").
> ? ? >> >>
> ? ? >> >> paste(c("4", "5"),
"th", sep = "", collapse = ", ",
> recycle0 > ? ? >> FALSE)
> ? ? >> >> is
> ? ? >> >> "4th, 5th".
> ? ? >> >> paste(c("4"? ? ?), "th", sep
= "", collapse = ", ",
> recycle0 > ? ? >> FALSE)
> ? ? >> >> is
> ? ? >> >> "4th".
> ? ? >> >> I think
> ? ? >> >> paste(c(? ? ? ? ), "th", sep =
"", collapse = ", ",
> recycle0 > ? ? >> FALSE)
> ? ? >> >> should be
> ? ? >> >> "",
> ? ? >> >> not character(0).
> ? ? >> >>
> ? ? >> >> ______________________________________________
> ? ? >> >> R-devel at r-project.org <mailto:R-devel at
r-project.org>
> <mailto:R-devel at r-project.org <mailto:R-devel at
r-project.org>>
> mailing list
> ? ? >> >>
> ? ? >>
>
https://urldefense.proofpoint.com/v2/url?u=https-3A__stat.ethz.ch_mailman_listinfo_r-2Ddevel&d=DwICAg&c=eRAMFD45gAfqt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=776IovW06eUHr1EDrabHLY7F47rU9CCUEItSDI96zc0&s=xN84DhkZeoxzn6SG0QTMpOGg2w_ThmjZmZymGUuD0Uw&e>
? ? >> >>
> ? ? >> >
> ? ? >> >? ? ? ?[[alternative HTML version deleted]]
> ? ? >> >
> ? ? >> > ______________________________________________
> ? ? >> > R-devel at r-project.org <mailto:R-devel at
r-project.org>
> <mailto:R-devel at r-project.org <mailto:R-devel at
r-project.org>>
> mailing list
> ? ? >> >
> ? ? >>
>
https://urldefense.proofpoint.com/v2/url?u=https-3A__stat.ethz.ch_mailman_listinfo_r-2Ddevel&d=DwICAg&c=eRAMFD45gAfqt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=776IovW06eUHr1EDrabHLY7F47rU9CCUEItSDI96zc0&s=xN84DhkZeoxzn6SG0QTMpOGg2w_ThmjZmZymGUuD0Uw&e>
? ? >> >
> ? ? >>
> ? ? >> --
> ? ? >> 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: hpages at fredhutch.org <mailto:hpages at
fredhutch.org>
> <mailto:hpages at fredhutch.org <mailto:hpages at
fredhutch.org>>
> ? ? >> Phone:? (206) 667-5791
> ? ? >> Fax:? ? (206) 667-1319
> ? ? >>
> ? ? >> ______________________________________________
> ? ? >> R-devel at r-project.org <mailto:R-devel at
r-project.org>
> <mailto:R-devel at r-project.org <mailto:R-devel at
r-project.org>>
> mailing list
> ? ? >> https://stat.ethz.ch/mailman/listinfo/r-devel
>
<https://urldefense.proofpoint.com/v2/url?u=https-3A__stat.ethz.ch_mailman_listinfo_r-2Ddevel&d=DwMFaQ&c=eRAMFD45gAfqt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=q5ueyHReS5hHK6TZ0dJ1N7Ro8dx-rsLHys8GrCugOls&s=OLA7CqaU5uKeid1aGw41XJ_2Uq7JXbcwpPOrTWWG2v4&e=>
> ? ? >>
>
<https://urldefense.proofpoint.com/v2/url?u=https-3A__stat.ethz.ch_mailman_listinfo_r-2Ddevel&d=DwMFaQ&c=eRAMFD45gAfqt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=cC2qctlVXd0qHMPvCyYvuVMqR8GU3DjTTqKJ0zjIFj8&s=COnDeGgHNnHJlLLZOznMlhcaFU1nIRlkaSbssvlrMvw&e=>
> ? ? >>
>
> ? ? > --
> ? ? > 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: hpages at fredhutch.org <mailto:hpages at
fredhutch.org>
> ? ? > Phone:? (206) 667-5791
> ? ? > Fax:? ? (206) 667-1319
>
> ? ? > ______________________________________________
> ? ? > R-devel at r-project.org <mailto:R-devel at
r-project.org> mailing list
> ? ? > https://stat.ethz.ch/mailman/listinfo/r-devel
>
<https://urldefense.proofpoint.com/v2/url?u=https-3A__stat.ethz.ch_mailman_listinfo_r-2Ddevel&d=DwMFaQ&c=eRAMFD45gAfqt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=q5ueyHReS5hHK6TZ0dJ1N7Ro8dx-rsLHys8GrCugOls&s=OLA7CqaU5uKeid1aGw41XJ_2Uq7JXbcwpPOrTWWG2v4&e=>
>
--
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: hpages at fredhutch.org
Phone: (206) 667-5791
Fax: (206) 667-1319
William Dunlap
2020-May-22 16:50 UTC
[Rd] paste(character(0), collapse="", recycle0=FALSE) should be ""
I agree with Herve, processing collapse happens last so collapse=non-NULL always leads to a single character string being returned, the same as paste(collapse=""). See the altPaste function I posted yesterday. Bill Dunlap TIBCO Software wdunlap tibco.com On Fri, May 22, 2020 at 9:12 AM Herv? Pag?s <hpages at fredhutch.org> wrote:> I think that > > paste(c("a", "b"), NULL, c("c", "d"), sep = " ", collapse = ",", > recycle0=TRUE) > > should just return an empty string and don't see why it needs to emit a > warning or raise an error. To me it does exactly what the user is asking > for, which is to change how the 3 arguments are recycled **before** the > 'sep' operation. > > The 'recycle0' argument has no business in the 'collapse' operation > (which comes after the 'sep' operation): this operation still behaves > like it always had. > > That's all there is to it. > > H. > > > On 5/22/20 03:00, Gabriel Becker wrote: > > Hi Martin et al, > > > > > > > > On Thu, May 21, 2020 at 9:42 AM Martin Maechler > > <maechler at stat.math.ethz.ch <mailto:maechler at stat.math.ethz.ch>> wrote: > > > > >>>>> Herv? Pag?s > > >>>>> on Fri, 15 May 2020 13:44:28 -0700 writes: > > > > > There is still the situation where **both** 'sep' and > > 'collapse' are > > > specified: > > > > >> paste(integer(0), "nth", sep="", collapse=",") > > > [1] "nth" > > > > > In that case 'recycle0' should **not** be ignored i.e. > > > > > paste(integer(0), "nth", sep="", collapse=",", recycle0=TRUE) > > > > > should return the empty string (and not character(0) like it > > does at the > > > moment). > > > > > In other words, 'recycle0' should only control the first > > operation (the > > > operation controlled by 'sep'). Which makes plenty of sense: > > the 1st > > > operation is binary (or n-ary) while the collapse operation > > is unary. > > > There is no concept of recycling in the context of unary > > operations. > > > > Interesting, ..., and sounding somewhat convincing. > > > > > On 5/15/20 11:25, Gabriel Becker wrote: > > >> Hi all, > > >> > > >> This makes sense to me, but I would think that recycle0 and > > collapse > > >> should actually be incompatible and paste should throw an > > error if > > >> recycle0 were TRUE and collapse were declared in the same > > call. I don't > > >> think the value of recycle0 should be silently ignored if it > > is actively > > >> specified. > > >> > > >> ~G > > > > Just to summarize what I think we should know and agree (or be > > be "disproven") and where this comes from ... > > > > 1) recycle0 is a new R 4.0.0 option in paste() / paste0() which by > > default > > (recycle0 = FALSE) should (and *does* AFAIK) not change anything, > > hence paste() / paste0() behave completely back-compatible > > if recycle0 is kept to FALSE. > > > > 2) recycle0 = TRUE is meant to give different behavior, notably > > 0-length arguments (among '...') should result in 0-length > results. > > > > The above does not specify what this means in detail, see 3) > > > > 3) The current R 4.0.0 implementation (for which I'm primarily > > responsible) > > and help(paste) are in accordance. > > Notably the help page (Arguments -> 'recycle0' ; Details 1st > > para ; Examples) > > says and shows how the 4.0.0 implementation has been meant to > work. > > > > 4) Several provenly smart members of the R community argue that > > both the implementation and the documentation of 'recycle0 > > TRUE' should be changed to be more logical / coherent / > sensical .. > > > > Is the above all correct in your view? > > > > Assuming yes, I read basically two proposals, both agreeing > > that recycle0 = TRUE should only ever apply to the action of 'sep' > > but not the action of 'collapse'. > > > > 1) Bill and Herv? (I think) propose that 'recycle0' should have > > no effect whenever 'collapse = <string>' > > > > 2) Gabe proposes that 'collapse = <string>' and 'recycle0 = TRUE' > > should be declared incompatible and error. If going in that > > direction, I could also see them to give a warning (and > > continue as if recycle = FALSE). > > > > > > Herve makes a good point about when sep and collapse are both set. That > > said, if the user explicitly sets recycle0, Personally, I don't think it > > should be silently ignored under any configuration of other arguments. > > > > If all of the arguments are to go into effect, the question then becomes > > one of ordering, I think. > > > > Consider > > > > paste(c("a", "b"), NULL, c("c", "d"), sep = " ", collapse = ",", > > recycle0=TRUE) > > > > Currently that returns character(0), becuase the logic is > > essenttially (in pseudo-code) > > > > collapse(paste(c("a", "b"), NULL, c("c", "d"), sep = " ", > > recycle0=TRUE), collapse = ", ", recycle0=TRUE) > > > > -> collapse(character(0), collapse = ", " recycle0=TRUE) > > > > -> character(0) > > > > Now Bill Dunlap argued, fairly convincingly I think, that paste(..., > > collapse=<string>) should /always/ return a character vector of length > > exactly one. With recycle0, though, it will return "" via the > progression > > > > paste(c("a", "b"), NULL, c("c", "d"), sep = " ", collapse = ",", > > recycle0=TRUE) > > > > -> collapse(character(0), collapse = ", ") > > > > -> "" > > > > > > because recycle0 is still applied to the sep-based operation which > > occurs before collapse, thus leaving a vector of length 0 to collapse. > > > > That is consistent but seems unlikely to be what the user wanted, imho. > > I think if it does this there should be at least a warning when paste > > collapses to "" this way, if it is allowed at all (ie if mixing > > collapse=<string>and recycle0=TRUEis not simply made an error). > > > > I would like to hear others' thoughts as well though. @Pages, Herve > > <mailto:hpages at fredhutch.org> @William Dunlap > > <mailto:wdunlap at tibco.com> is "" what you envision as thee desired and > > useful behavior there? > > > > Best, > > ~G > > > > > > > > I have not yet my mind up but would tend to agree to "you guys", > > but I think that other R Core members should chime in, too. > > > > Martin > > > > >> On Fri, May 15, 2020 at 11:05 AM Herv? Pag?s > > <hpages at fredhutch.org <mailto:hpages at fredhutch.org> > > >> <mailto:hpages at fredhutch.org <mailto:hpages at fredhutch.org>>> > > wrote: > > >> > > >> Totally agree with that. > > >> > > >> H. > > >> > > >> On 5/15/20 10:34, William Dunlap via R-devel wrote: > > >> > I agree: paste(collapse="something", ...) should always > > return a > > >> single > > >> > character string, regardless of the value of recycle0. > > This would be > > >> > similar to when there are no non-NULL arguments to paste; > > >> collapse="." > > >> > gives a single empty string and collapse=NULL gives a zero > > long > > >> character > > >> > vector. > > >> >> paste() > > >> > character(0) > > >> >> paste(collapse=", ") > > >> > [1] "" > > >> > > > >> > Bill Dunlap > > >> > TIBCO Software > > >> > wdunlap tibco.com > > < > https://urldefense.proofpoint.com/v2/url?u=http-3A__tibco.com&d=DwMFaQ&c=eRAMFD45gAfqt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=q5ueyHReS5hHK6TZ0dJ1N7Ro8dx-rsLHys8GrCugOls&s=o9ozvxBK-kVvAUFro7U1RrI5w0U8EPb0uyjQwMvOpt8&e> > > > >> > > < > https://urldefense.proofpoint.com/v2/url?u=http-3A__tibco.com&d=DwMFaQ&c=eRAMFD45gAfqt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=cC2qctlVXd0qHMPvCyYvuVMqR8GU3DjTTqKJ0zjIFj8&s=rXIwWqf4U4HZS_bjUT3KfA9ARaV5YTb_kEcXWHnkt-c&e> > > > >> > > > >> > > > >> > On Thu, Apr 30, 2020 at 9:56 PM suharto_anggono--- via > > R-devel < > > >> > r-devel at r-project.org <mailto:r-devel at r-project.org> > > <mailto:r-devel at r-project.org <mailto:r-devel at r-project.org>>> > wrote: > > >> > > > >> >> Without 'collapse', 'paste' pastes (concatenates) its > > arguments > > >> >> elementwise (separated by 'sep', " " by default). New in > > R devel > > >> and R > > >> >> patched, specifying recycle0 = FALSE makes mixing > > zero-length and > > >> >> nonzero-length arguments results in length zero. The > > result of > > >> paste(n, > > >> >> "th", sep = "", recycle0 = FALSE) always have the same > > length as > > >> 'n'. > > >> >> Previously, the result is still as long as the longest > > argument, > > >> with the > > >> >> zero-length argument like "". If all og the arguments have > > >> length zero, > > >> >> 'recycle0' doesn't matter. > > >> >> > > >> >> As far as I understand, 'paste' with 'collapse' as a > > character > > >> string is > > >> >> supposed to put together elements of a vector into a > single > > >> character > > >> >> string. I think 'recycle0' shouldn't change it. > > >> >> > > >> >> In current R devel and R patched, paste(character(0), > > collapse = "", > > >> >> recycle0 = FALSE) is character(0). I think it should be > > "", like > > >> >> paste(character(0), collapse=""). > > >> >> > > >> >> paste(c("4", "5"), "th", sep = "", collapse = ", ", > > recycle0 > > >> FALSE) > > >> >> is > > >> >> "4th, 5th". > > >> >> paste(c("4" ), "th", sep = "", collapse = ", ", > > recycle0 > > >> FALSE) > > >> >> is > > >> >> "4th". > > >> >> I think > > >> >> paste(c( ), "th", sep = "", collapse = ", ", > > recycle0 > > >> FALSE) > > >> >> should be > > >> >> "", > > >> >> not character(0). > > >> >> > > >> >> ______________________________________________ > > >> >> R-devel at r-project.org <mailto:R-devel at r-project.org> > > <mailto:R-devel at r-project.org <mailto:R-devel at r-project.org>> > > mailing list > > >> >> > > >> > > > https://urldefense.proofpoint.com/v2/url?u=https-3A__stat.ethz.ch_mailman_listinfo_r-2Ddevel&d=DwICAg&c=eRAMFD45gAfqt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=776IovW06eUHr1EDrabHLY7F47rU9CCUEItSDI96zc0&s=xN84DhkZeoxzn6SG0QTMpOGg2w_ThmjZmZymGUuD0Uw&e> > >> >> > > >> > > > >> > [[alternative HTML version deleted]] > > >> > > > >> > ______________________________________________ > > >> > R-devel at r-project.org <mailto:R-devel at r-project.org> > > <mailto:R-devel at r-project.org <mailto:R-devel at r-project.org>> > > mailing list > > >> > > > >> > > > https://urldefense.proofpoint.com/v2/url?u=https-3A__stat.ethz.ch_mailman_listinfo_r-2Ddevel&d=DwICAg&c=eRAMFD45gAfqt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=776IovW06eUHr1EDrabHLY7F47rU9CCUEItSDI96zc0&s=xN84DhkZeoxzn6SG0QTMpOGg2w_ThmjZmZymGUuD0Uw&e> > >> > > > >> > > >> -- > > >> 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: hpages at fredhutch.org <mailto:hpages at fredhutch.org> > > <mailto:hpages at fredhutch.org <mailto:hpages at fredhutch.org>> > > >> Phone: (206) 667-5791 > > >> Fax: (206) 667-1319 > > >> > > >> ______________________________________________ > > >> R-devel at r-project.org <mailto:R-devel at r-project.org> > > <mailto:R-devel at r-project.org <mailto:R-devel at r-project.org>> > > mailing list > > >> https://stat.ethz.ch/mailman/listinfo/r-devel > > < > https://urldefense.proofpoint.com/v2/url?u=https-3A__stat.ethz.ch_mailman_listinfo_r-2Ddevel&d=DwMFaQ&c=eRAMFD45gAfqt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=q5ueyHReS5hHK6TZ0dJ1N7Ro8dx-rsLHys8GrCugOls&s=OLA7CqaU5uKeid1aGw41XJ_2Uq7JXbcwpPOrTWWG2v4&e> > > > >> > > < > https://urldefense.proofpoint.com/v2/url?u=https-3A__stat.ethz.ch_mailman_listinfo_r-2Ddevel&d=DwMFaQ&c=eRAMFD45gAfqt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=cC2qctlVXd0qHMPvCyYvuVMqR8GU3DjTTqKJ0zjIFj8&s=COnDeGgHNnHJlLLZOznMlhcaFU1nIRlkaSbssvlrMvw&e> > > > >> > > > > > -- > > > 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: hpages at fredhutch.org <mailto:hpages at fredhutch.org> > > > Phone: (206) 667-5791 > > > Fax: (206) 667-1319 > > > > > ______________________________________________ > > > R-devel at r-project.org <mailto:R-devel at r-project.org> mailing > list > > > https://stat.ethz.ch/mailman/listinfo/r-devel > > < > https://urldefense.proofpoint.com/v2/url?u=https-3A__stat.ethz.ch_mailman_listinfo_r-2Ddevel&d=DwMFaQ&c=eRAMFD45gAfqt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=q5ueyHReS5hHK6TZ0dJ1N7Ro8dx-rsLHys8GrCugOls&s=OLA7CqaU5uKeid1aGw41XJ_2Uq7JXbcwpPOrTWWG2v4&e> > > > > > -- > 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: hpages at fredhutch.org > Phone: (206) 667-5791 > Fax: (206) 667-1319 >[[alternative HTML version deleted]]
Maybe Matching Threads
- paste(character(0), collapse="", recycle0=FALSE) should be ""
- paste(character(0), collapse="", recycle0=FALSE) should be ""
- paste(character(0), collapse="", recycle0=FALSE) should be ""
- paste(character(0), collapse="", recycle0=FALSE) should be ""
- paste(character(0), collapse="", recycle0=FALSE) should be ""