通过阅读官方R文档以及一些贡献的教程,我们可以了解到变量名称被视为语言对象 - 即它们是符号即名称.
在p.Symbol LookUp标题下的R语言定义手册(版本3.1.1)中的14个是一个简单的例子:"y <- 4 ... y is a symbol and 4 is its value".令人困惑的是is.symbol(y),或等效地is.name(y)返回FALSE(对于引用和未引用的参数y).当一个强制转换的变量与一个符号y <- as.name(4),然后is.symbol(y)和is.name(y)回报TRUE.因此,变量名称似乎不是符号/名称,直到它们被强制转换为符号/名称.什么类型的R对象在被强制转换为符号之前是变量名?
感谢您帮助我解决这一困惑.
MrF*_*ick 11
理解什么is.symbol和is.name正在做什么很重要.首先,它们实际上是相同的功能.观察那个
is.symbol
# function (x) .Primitive("is.symbol")
is.name
# function (x) .Primitive("is.symbol")
Run Code Online (Sandbox Code Playgroud)
因此符号/名称在R中实际上是相同的.所以在这里我将使用 is.name
但是请注意,这些函数正在检查您传递的名称指向的"事物"是符号还是名称.他们正在查找名称所指的内容.
所以如果你这样做了
# rm(foo) make sure it doesn't exist
is.name(foo)
# Error: object 'foo' not found
Run Code Online (Sandbox Code Playgroud)
你收到一个错误.尽管事实上这foo是一个名称本身,但它所指出的尚未定义.它试图"查找"的价值foo.观察那个
quote(foo)
# foo
is.name(quote(foo))
# [1] TRUE
Run Code Online (Sandbox Code Playgroud)
因此,quote将参数视为语言对象,您可以这样测试它.现在,如果我们定义foo指向一个名称
(foo <- as.name("hello"))
# hello
is.name(foo)
# [1] TRUE
Run Code Online (Sandbox Code Playgroud)
但如果我们把它指向别的东西
(foo <- "hello")
# [1] "hello"
is.name(foo)
# [1] FALSE
is.character(foo)
# [1] TRUE
Run Code Online (Sandbox Code Playgroud)
然后它不再指向一个名字(这里,它指向一个字符)
因此,变量名称是名称/符号,但通常大多数R函数将与它们指向的内容一起使用,而不是返回有关名称本身的信息.所以,问题是,你是如何曲解is.name和is.symbol进行工作.当您使用该语言编程时,它才真正有所作为.
| 归档时间: |
|
| 查看次数: |
909 次 |
| 最近记录: |