Я знаю, что рекомендуется не использовать имена из глобального пространства имен при именовании переменных, но что произойдет, если вы сделаете это случайно?
Я думал, что потеряю предыдущий объект, но 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"
sd(1:10)
— это вызов функцииsd
. Итак, R ищет функцию под названиемsd()
, которую он находит в предварительно загруженном пакете статистики. - person Rich Scriven   schedule 20.11.2017