>>>>> 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 ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel