gpt4 book ai didi

r - 如果该函数名称已重新分配给一个值,R 如何知道使用该函数?

转载 作者:行者123 更新时间:2023-12-03 23:42:34 26 4
gpt4 key购买 nike

我知道在命名变量时不要使用全局命名空间中的名称是一个好习惯,但是如果您不小心这样做会发生什么?

我以为我会丢失之前的对象,但 R 似乎在幕后有一些诡计:

print(sd)
#> function (x, na.rm = FALSE)
#> sqrt(var(if (is.vector(x) || is.factor(x)) x else as.double(x),
#> na.rm = na.rm))
#> <bytecode: 0x0000000017e687b8>
#> <environment: namespace:stats>

sd <- 12.2

print(sd)
#> [1] 12.2

sd(1:10)
#> [1] 3.02765

所以现在 R 知道有一个长度为一的双向量称为 sd和统计功能 sd()在全局命名空间中?

或者当我打电话时 sd(1:10)解释器自动将其扩展为 sd.default() ?但是 R 怎么知道在 sd 上寻找默认方法?因为它现在是一个向量?那么存储在内存中不同位置的函数和变量可以被同名引用吗?

obviously_a_user_defined_variable <- 257
obviously_a_user_defined_variable(1:10)
#> Error in obviously_a_user_defined_variable(1:10): could not find
# function "obviously_a_user_defined_variable"

最佳答案

R 有 separate namespaces for functions and variables .根据名称出现的上下文,R 将在一个 namespace 或另一个 namespace 中查找名称。

例如,表达式 sd(1:10)是一个调用,调用中的第一个元素必须是函数的名称。因此,在这种情况下,R 将查找名为 sd 的函数。 .

另一方面,表达式 sd不是调用而是名称,它可以是变量名或函数名。在这种情况下,R 将首先查找名为 sd 的搜索路径中的第一个对象。不管它是函数还是其他类型的对象。

关于r - 如果该函数名称已重新分配给一个值,R 如何知道使用该函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47382080/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com