R语言中用变量作为c()函数命名参数时出错的原因
R语言中使用变量作为函数命名参数报错的原因
问题背景
我有一个名为lst的对象,结构如下:
> lst $vals [1] "" "Dark Green" "Orange" "Yellow" "Grey" $hues [1] "" "darkgreen" "orange" "yellow" "grey" $labs [1] "" "darkgreen" "orange" "yellow" "grey"
尝试合并lst中的元素时遇到错误:
场景1(报错):
c(l$vals[2] = l$hues[2]) # l$vals[2] 为 'Dark Green',l$hues[2] 为 'darkgreen' Error: unexpected '=' in "c(l$vals[2] ="
场景2(正常执行):
c('Dark Green' = 'darkgreen')
请问出现该错误的原因是什么?
原因解释
R语言的语法规则明确规定:函数的命名参数左侧必须是字面量(直接书写的字符串、符号),不能是变量或者表达式。
- 场景2中,
'Dark Green'是直接写的字符串字面量,符合R对命名参数的解析规则,因此可以正常执行。 - 场景1中,
l$vals[2]是一个需要计算的变量表达式,R解析器在处理函数参数时,会把左侧的内容当作参数名的字面符号,而不会去计算它的取值。当解析器遇到=时,发现左边不是合法的字面量参数名,就会抛出语法错误。
解决方法
如果需要用变量的值作为参数名,可以使用setNames函数,或者先创建向量再赋值名称:
# 方法1:使用setNames setNames(l$hues[2], l$vals[2]) # 方法2:先创建向量再命名 result <- l$hues[2] names(result) <- l$vals[2] result
内容的提问来源于stack exchange,提问作者Nemo
相关产品推荐
相关产品推荐

