关于R语言symbol定义的疑问:as.symbol(h)为何返回`12`而非h
R语言Symbol(符号)的常见误区解析
先明确你的核心问题:你混淆了符号(Symbol)的本质,以及as.symbol()函数的参数要求。
关键概念澄清
- 在R里,符号就是对象的"名字标签",它本身不是对象,而是用来指向某个对象的标识符。比如你执行
h=12时,是创建了一个值为12的对象,然后把符号h绑定到这个对象上——h是名字,12是这个名字对应的实际内容。 as.symbol()函数的作用是把字符串转换成符号,它需要的参数是字符串形式的对象名,而不是对象本身。
逐行解析你的代码
h=12
这里创建了值为12的对象,绑定到符号h上。
is.symbol(h) # FALSE
你检查的是h指向的对象(也就是12)是不是符号,显然不是,所以返回FALSE。如果要检查h这个符号本身,应该写is.symbol(as.name("h"))或者is.symbol(quote(h))。
hs=as.symbol(h)
此时h的值是12,相当于你传了字符串"12"给as.symbol(),所以得到的是符号12,而不是你想要的符号h。
hs # `12`
输出的就是刚才生成的符号12,用反引号括起来是因为它是数字开头的不规范变量名。
eval(hs) # Error in eval(hs) : object '12' not found
eval()会尝试找名为12的对象,但你从未创建过这个对象,所以报错。
正确获取符号h的方法
想要得到指向对象h的符号,有几种常用方式:
- 方法1:给
as.symbol()传字符串形式的对象名
h = 12 hs = as.symbol("h") hs # h eval(hs) # 12
- 方法2:用
quote()直接捕获符号
hs2 = quote(h) is.symbol(hs2) # TRUE eval(hs2) # 12
- 方法3:用
substitute()(适合在函数内或需要捕获当前环境符号的场景)
hs3 = substitute(h) eval(hs3) # 12
内容的提问来源于stack exchange,提问作者blueskyddd
相关产品推荐
相关产品推荐

