On 07/10/2016 1:44 PM, Jorge Cimentada wrote:
Hi Bert,

Yes, I'm aware of the difference between a and "a" but in terms of object
classes I don't see the difference between "a" and names(mtcars)[1].
They're both strings. However, for creating a named character vector, this
works:

c("a" = "b)

But this doesn't

c(names(mtcars)[1] = "b")

For example:

df <- data.frame("a" = 1:5)
c("a" = "b")
c(names(df)[1] = "b") # error

But

identical(names(df)[1], "a")

That was my initial question.

It's a parser issue. The parser is looking for a name before the equal sign; it finds a string literal, and just to be nice, treats it as a name. But it never evaluates it as an expression; evaluation happens later.

The parser would be simpler (and apparently less confusing) if it just refused to accept "a" where a name is needed, but at the time this was written, there was no other way to express a name that was syntactically a name, e.g. "bad name". Later the `bad name` notation was added, and it makes more sense to use that.

If you really want the result you expected, you can get it this way:

structure("b", names = names(df)[1])

Duncan Murdoch

______________________________________________
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