为何使用paste0生成R命名向量名称时会报错?
为什么用paste0生成命名向量的名字会报错?
在R里,c(name = value)这种创建命名向量的写法是语法层面的语法糖,它的规则很明确:等号左边必须是字面量形式的名字——要么是直接写的合法标识符(比如lab1),要么是带引号的字符串(比如"lab1")。这些名字是在代码解析阶段就被识别的,不需要运行计算。
而paste0("lab", "2")是一个运行时表达式,它的结果要等代码执行的时候才会计算出来。R的语法解析器在处理到paste0("lab", "2") = "my_lab2"这一行时,看到等号左边不是一个它能直接识别的字面量名字,就会判定这是语法错误,所以抛出unexpected '='的提示。
反观你用paste0生成向量元素的情况:等号右边的内容是赋值的“值”,R允许这里是任意表达式——因为解析器知道这里只需要计算出一个结果就行,不需要在解析阶段确定它是什么,所以完全没问题。
如果要动态生成向量的名字,就得用运行时能处理名字的方法,比如你提到的setNames,或者先创建向量再赋值名字:
# 用setNames的方式 values <- setNames( c("my_lab1", "my_lab2"), c("lab1", paste0("lab", "2")) ) # 先建向量再设名字 values <- c("my_lab1", "my_lab2") names(values) <- c("lab1", paste0("lab", "2"))
内容的提问来源于stack exchange,提问作者user63230
相关产品推荐
相关产品推荐

