Я знаю, что хорошая практика не использовать имена из глобального пространства имен при именовании переменных, но что происходит, когда вы делаете это случайно?
Я думал, что потеряю предыдущий объект, но у 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"