From suh@rto_@@ggo@o m@iii@g oii y@hoo@com  Sun May  3 10:54:12 2020
From: suh@rto_@@ggo@o m@iii@g oii y@hoo@com (suh@rto_@@ggo@o m@iii@g oii y@hoo@com)
Date: Sun, 3 May 2020 08:54:12 +0000 (UTC)
Subject: [Rd] 
 paste(character(0), collapse="", recycle0=FALSE) should be ""
In-Reply-To: <24237.36122.138161.27636@stat.math.ethz.ch>
References: <1527610684.154738.1588302337266.ref@mail.yahoo.com>
 <1527610684.154738.1588302337266@mail.yahoo.com>
 <24237.36122.138161.27636@stat.math.ethz.ch>
Message-ID: <612519988.282141.1588496052127@mail.yahoo.com>

 I was wrong, as I didn't actually try and didn't read the documentation carefully. I thought that ' zero-length arguments being recycled to "" ' happens when recycle0 = TRUE. It is actually the opposite.

Everywhere in my previous message, recycle0 = FALSE should be recycle0 = TRUE.

I really think that 'paste' with 'collapse' specified (as a character string) should always result in a single character string, no matter what value of 'recycle0'.

paste(character(0), collapse = "", recycle0 = TRUE) # character(0), but should be ""

paste(character(0), recycle0 = FALSE)
is the same as
paste(character(0), recycle0 = TRUE) .
'recycle0' doesn't matter there.
Why should
paste(character(0), collapse = "", recycle0 = FALSE)
be different from
paste(character(0), collapse = "", recycle0 = TRUE) ?

paste(c("4", "5"), "th", sep = "", collapse = ", ", recycle0 =? TRUE) # "4th, 5th"
paste(c("4"? ? ), "th", sep = "", collapse = ", ", recycle0 =? TRUE) # "4th"
paste(c(? ? ? ? ), "th", sep = "", collapse = ", ", recycle0 =? TRUE) # character(0), but should be ""


On Saturday, 2 May 2020, 10:09:21 pm GMT+7, Martin Maechler <maechler at stat.math.ethz.ch> wrote:


>>>>> suharto anggono--- via R-devel 
>>>>>? ? on Fri, 1 May 2020 03:05:37 +0000 (UTC) writes:

? ? > 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. 

That's not intended.
(It's what should only happen with the new (non-default) recycle0=TRUE )

> 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.

Well, not quite:? only? 'recycle0=FALSE'? shouldn't change it
.. maybe this is what you meant anyway.

? ? > 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="").

Definitely:? The intent of the new 'recycle0' argument is to 
provide a non-default possibility for paste(...., recycle0=TRUE) to behave more
like "arithmetic" functions where the recycling rules ensure that
if one argument has length 0 then the result has length 0:
i.e.,? paste(a,b,c,d,? recycle0=TRUE)? ? ? should recycle the same as
? ? ? ? ? ? ? a+b+c+d? ? ? ? ? ? ? ? ? ? ? does recycle

Indeed, the default 'recycle0=FALSE'? should correspond to previous (R <= 4.0.0)
behavior entirely.

BUT from all I see, R-devel and R-patched's version of paste()
do behave as they should.? Also what you clim here is not true :

? ? > 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).

Rather, what I see is what the comments of the following code
lines claim (according to the intention of 'recycle0', contrary
some of your claims above) :


paste(character(0), collapse = "", recycle0 = FALSE) # is "", like
paste(character(0), collapse = "")
paste(character(0), collapse = "", recycle0 =? TRUE) # is character(0)


paste(c("4", "5"), "th", sep = "", collapse = ", ", recycle0 = FALSE) # is "4th, 5th"
paste(c("4"? ? ), "th", sep = "", collapse = ", ", recycle0 = FALSE) # is "4th"

paste(c(? ? ? ? ), "th", sep = "", collapse = ", ", recycle0 = FALSE) # is "th"
##
paste(c("4", "5"), "th", sep = "", collapse = ", ", recycle0 =? TRUE) # is "4th, 5th"
paste(c("4"? ? ), "th", sep = "", collapse = ", ", recycle0 =? TRUE) # is "4th"
paste(c(? ? ? ? ), "th", sep = "", collapse = ", ", recycle0 =? TRUE) # is character(0)


There must be a lapsus / misunderstanding somewhere.
I don't see any problem in the new behavior for now.

Best regards,
Martin  
	[[alternative HTML version deleted]]



[Rd] paste(character(0), collapse="", recycle0=FALSE) should be ""
suh@rto_@@ggo@o m@iii@g oii y@hoo@com