为何无法在c()函数内用其他变量索引的标签命名向量元素?
为啥
c(namevec[1] = 1)会报错,直接写"name1" = 1就行? 这事儿本质是R的语法解析规则在搞鬼!当你在c()里用标签 = 值的方式给元素命名时,等号左边的标签必须是语法层面的「常量」——要么是直接写死的字符串(比如"name1"),要么是符合变量命名规则的裸名称(比如name1,R会自动把它转成字符串标签)。
但namevec[1]是个需要计算的表达式啊!R的语法解析器在处理c()的参数列表时,会先检查等号左边的格式合不合法,根本不会先去计算namevec[1]得到它的值。所以它看到namevec[1] =这种结构,直接就懵了,觉得这语法不对,反手给你抛个错误。
给你举俩例子对比下就懂了:
- 合法操作:
c("my-tag" = 1, myNormalName = 2)——左边要么是字符串常量,要么是合法标识符,解析器一眼能认出是标签 - 非法操作:
c(paste("name",1) = 1)或者c(namevec[1] = 1)——左边是需要运行计算的表达式,解析器不接受这种作为标签
说白了就是:R在处理c()的命名参数时,等号左边只认「现成的标签符号」,不会帮你先计算表达式得到标签内容,所以只有直接写的字符串/标识符才能通过语法检查。
内容的提问来源于stack exchange,提问作者Humpelstielzchen
相关产品推荐
相关产品推荐

