我知道在命名变量时不使用全局命名空间中的名称是一种好习惯,但是当你意外地执行此操作时会发生什么?
我以为我会丢失之前的对象,但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
Run Code Online (Sandbox Code Playgroud)
所以现在R知道在全局命名空间中有一个长度为一个双向量调用sd和一个stats函数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"
Run Code Online (Sandbox Code Playgroud)