10 非标准计算

10.1 定义

在R中不仅可以访问函数参数的值,还可以访问对参数进行计算的表达式代码,这就是非标准计算(NSE)

10.2 例子

substitute(expr, env)捕获用来计算的表达式expr,并用在环境env中可能存在的可以用于替换的变量值将表达式做替换。例:

e <- new.env()
e$x <- 1
substitute(x, e)
#> [1] 1

10.3 小知识点

  • substitute()经常与deparse()一起使用,deparse()substitute()的结果为参数并把它转换成字符向量(substitute()的结果是name类型的)

  • quote()substitute()行为相同,除了它不做替换操作,quote()eval()是对立的

  • eval(expr, envir, enclos)可以在指定环境中计算表达式,envir参数位置不一定是环境,也可以填列表或数据框

  • eval()函数的第三个参数控制eval()在环境envir中找不到变量名时去哪里找,eval()首先会在enclos参数中找,再在enclos参数的父环境中找。

  • list2env()可以将一个列表转换成具有显式父环境的环境,这里希望在函数的调用环境中查找。

    list2env(x, parent = parent.frame())
  • R中的pairlist数据类型相当于python中的dictionary