Thanks Ege -

That narrows it down, ... but it's still weird.

My issue is that I don't consider "c(\"xyz\", \"uvw\")" to be a valid character 
representation of a list. c() is a function, so "c(\"xyz\", \"uvw\")" is a 
string representation of a function call that could be  eval(parse(...))'ed 
into a two-element vector ... but considering this a coercion seems really 
weird.

What do I think your example should return? An object of the same general 
structure as the input, with non-character components coerced to character. And 
if that's not possible because there is no good character representation (e.g. 
if its a closure) than it should return an error. 


Cheers,
Boris

 


> On 2020-11-09, at 22:24, Ege Rubak <ru...@math.aau.dk> wrote:
> 
> EXTERNAL EMAIL:  Treat content with extra caution.
> 
> I think `paste()` just calls `as.character()` on each input argument
> and then collapses things afterwards. Calling `as.character()` on the
> first input argument generates exactly the output you show (and didn't
> expect) and there is nothing to collapse. So changing `collapse = ""`
> to anything else doesn't change behaviour.
> 
> The question is reduced to how `as.character()` should handle a list as
> input. It seems to me that this input is so generic that it is hard to
> handle graciously without all kinds of special cases. So you expect the
> length one list
> 
> as.character(list(s = c("xyz", "uvw"))
> 
> to return the length 2 character vector `c("xyz", "uvw")`? What should
> 
> as.character(list(s = c("xyz", "uvw"), t = c("a", "b", "c"))
> 
> return?
> 
> Kind regards,
> Ege
> 
> On Mon, 2020-11-09 at 11:38 +0000, Boris Steipe wrote:
>> I was just surprised by very un-intuitive behaviour of paste(), which
>> appears to collapse a one-column data frame or one-element list into
>> a deparsed expression, rather than producing the expected string. Can
>> someone kindly explain what's going on here?
>> 
>> 
>> reprex:
>> =======
>> 
>> list(s = c("xyz", "uvw"))
>> #     s
>> # 1 xyz
>> # 2 uvw
>> 
>> paste(list(s = c("xyz", "uvw")), collapse = "")
>> # [1] "c(\"xyz\", \"uvw\")"   # This is unexpected!
>> 
>> I would have expected:
>> # [1] "xyzuvw"
>> 
>> ... which I do get with e.g.
>> paste(list(s = c("xyz", "uvw"))$s, collapse = "")
>> 
>> But what logic is there in returning a deparsed expression?
>> 
>> 
>> 
>> Thanks!
>> Boris
>> ______________________________________________
>> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide
>> http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to