[R] paste() turns list element character vector into deparsed expression. Why?
bor|@@@te|pe @end|ng |rom utoronto@c@
Mon Nov 9 13:58:22 CET 2020
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.
> On 2020-11-09, at 22:24, Ege Rubak <rubak using 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"))
> Kind regards,
> 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?
>> list(s = c("xyz", "uvw"))
>> # s
>> # 1 xyz
>> # 2 uvw
>> paste(list(s = c("xyz", "uvw")), collapse = "")
>> #  "c(\"xyz\", \"uvw\")" # This is unexpected!
>> I would have expected:
>> #  "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?
>> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
>> PLEASE do read the posting guide
>> and provide commented, minimal, self-contained, reproducible code.
More information about the R-help