gpt4 book ai didi

R 变量名 : symbols/names or something else?

转载 作者:行者123 更新时间:2023-12-04 06:37:18 25 4
gpt4 key购买 nike

通过阅读官方 R 文档以及一些贡献的教程,人们了解到变量名称被视为语言对象 - 即它们是符号又名名称。

在第。符号查找标题下的 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 对象是变量名,然后才被强制转换为符号?

感谢您帮助解决这个困惑。

最佳答案

了解什么很重要 is.symbolis.name是做。首先,它们实际上是相同的功能。观察到

is.symbol
# function (x) .Primitive("is.symbol")
is.name
# function (x) .Primitive("is.symbol")

所以符号/名称在 R 中实际上是一样的。所以在这里我将只使用 is.name
但还要注意,这些函数正在检查您传入的名称指向的“事物”是符号还是名称。他们正在查找名称所指的内容。

所以如果你做了
# rm(foo)   make sure it doesn't exist
is.name(foo)
# Error: object 'foo' not found

你得到一个错误。尽管 foo是一个名字本身,它指向的东西还没有定义。它试图“查找” foo 的值.观察到
quote(foo)
# foo
is.name(quote(foo))
# [1] TRUE

所以 quote将参数视为语言对象,您可以通过这种方式对其进行测试。现在如果我们定义 foo指向一个名字
(foo <- as.name("hello"))
# hello
is.name(foo)
# [1] TRUE

但是如果我们把它指向别的东西
(foo <- "hello")
# [1] "hello"
is.name(foo)
# [1] FALSE
is.character(foo)
# [1] TRUE

那么它不再指向一个名字(这里,它指向一个字符)

因此变量名称是名称/符号,但通常大多数 R 函数将使用它们指向的内容而不是返回有关名称本身的信息。所以问题是你误解了 is.nameis.symbol正在工作。只有当您使用该语言进行编程时,它才会真正发挥作用。

关于R 变量名 : symbols/names or something else?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25235240/

25 4 0