函数组成

函数有三个部分组成:

  • 表达式 formals
  • 主体 body
  • 环境 envir

前两者都是显式的,而环境则是隐式的。

栗子如下:

  1. f02 <- function(x, y) {
  2. # A comment
  3. x + y
  4. }
  5. formals(f02)
  6. #> $x
  7. #>
  8. #>
  9. #> $y
  10. body(f02)
  11. #> {
  12. #> x + y
  13. #> }
  14. environment(f02)
  15. #> <environment: R_GlobalEnv>

原始函数( Primitive functions)

这些函数直接由C 语言编写,在R 中被调用,比如:

  1. > `+`
  2. function (e1, e2) .Primitive("+")
  3. > sum
  4. function (..., na.rm = FALSE) .Primitive("sum")

因此它们的类型也有所不同,而如果尝试获得其元素的话,也是NULL:

8. 函数 - 图1

函数调用

  • 几种多个函数调用方法的对比

8. 函数 - 图2

句法作用域

8. 函数 - 图3

  • R 会在层层作用域中的最近一层寻找与变量相同名称的变量
  • 即使R 可以避免函数与变量重名的冲突,我们也要小心!

8. 函数 - 图4

  • 函数每一次运行都会刷新其内部的子环境

8. 函数 - 图5

  • 函数是动态寻找的,它会一直在作用域中查找,而不是在某个时间段锁定某个变量。