函数中的惰性求值

R
Author

Rui

Published

January 30, 2023

参考:R for Data Science

惰性求值(Lazy Evaluation)

惰性求值是 R 的一个重要特性。指的是直到需要参数时才会进行求值。没有使用参数,那么它就一直没有实际值。

例 1

dis <- function(x, y, z) {
  sqrt(x^2 + y^2)
}

dis(3, 4)
## [1] 5

在定义函数 dis 时创建了形式参数 x, y, z,但实际上参数 z 没有参与计算。不给 z 传入实值时并不会报错,因为函数 dis 并不需要参数 z

例 2

printout <- function(a, b) {
  print(a)
  print(b)
}

printout(100)
## [1] 100
## Error in print(b): argument "b" is missing, with no default

报错了,但还是把第一个参数打印出来了,而非从一开始就报错并且无任何输出。

你可以类比物理学中的串联电路:串联电路中电路断开会导致线路上所有的灯泡都不亮。而以上情况正好相反:电路断开处前面的灯泡依然会亮。

这是因为惰性求值的特点,仅在使用参数 b 时才会对其求值,不会影响 a 的求值。换句话说:惰性求值使得之前的求值都可以正常进行,直到运行到出错的部分。