符号
当在R中定义一个变量时,实际上就是在环境中将一个符号赋给一个值
x <- 1
实际上就是在全局环境中将符号x赋给一个长度为1,值为1的向量对象
当R解释器对表达式求值时,它会处理所有的符号
如果将若干个符号组合成一个对象,R会解析成该对象的每个符号
> x <- 1 > y <- 2 > z <- 3 > > (v <- c(x, y, z)) [1] 1 2 3 > > #由于v已定义,更改x的值并不会使v的值也相应变化 > x <- 10 > v [1] 1 2 3
可以推迟表达式的求值,使得符号不会立即被解析
> x <- 1 > y <- 2 > z <- 3 > > v <- quote(c(x, y, z)) > eval(v) [1] 1 2 3 > > x <- 5 > eval(v) [1] 5 2 3
使用delayedAssign函数创建一个允诺对象,使得变量只在初次用到时才会被求值
> x <- 1 > y <- 2 > z <- 3 > delayedAssign("v", c(x, y, z)) > x <- 5 > v [1] 5 2 3
在包中使用允诺对象可以让用户使用对象而无须将其加载到内存中
不过无法判断一个对象是否是允诺对象,也无从知道它是在哪个环境中创建的