环境和函数
环境:我们所创建的所有变量都需要存储在某处,即环境,环境本身也是另外一种变量。
environment()
#返回包含的特定函数的环境
new.env()
#创建环境
** 向环境中分配变量:双方括号(加引号),$符号,assign()函数(加引号)**
ls(envir = )
ls.str(envir = )
#列出环境变量的所有内容
exists()
#测试变量是否在环境中
as.environment()
#转换为环境变量
list2env()
#同上
所有的环境都是嵌套的,她们必须有一个父环境(除了位于顶端的空环境)
exists()
也会在父环境中寻找变量,可以指定参数inherits = FALSE来使他们仅在指定的环境搜索。
envir = globalenv()
#访问全局环境
envir = baseenv()
#访问基础环境
** 在另外两种情况下也可能遇到环境:首先,调用函数时,函数所定义的所有变量都被存储在属于该函数的环境中;其次,加载包时,包中的函数将存储于其搜索路径的环境中。**
** 函数:**
rt()
#生成基于T分布的随机数,三个参数:n随机数的数目,df是自由度,ncp是一个可选的非中心参数。
** 调用函数时,如果不命名参数,R将按位置匹配他们。**
** 可以给参数提供默认值。**
formals()
#返回参数的配对列表
formalArgs()
#返回参数名称的字符向量
body()
#返回函数的函数体
deparse()
#查找一个调用了另一个函数的函数
** 函数形参的默认值可以把任何R代码放进去,甚至使用其他形参 **
na.rm = na.rm
删除计算之前的任何缺失值
na.rm = TRUE
计算的时候忽略缺失值
** 特殊参数(…) 包含了所有不能被位置或名称匹配的参数,能将参数传递给子函数。占位参数,表明函数还有其他形式参数未指定的参数 **
** 向其他函数传递和接收函数 **
** 函数作为其他函数的参数 **
do.call()
#调用其他函数的替代语法,以列表的形式将参数传递给函数,而不是逐次传递
do.call(rbind,list(x1,x2,x3))
等价于 rbind(x1,x2,x3)
** 可以以匿名方式传递函数。**
** 变量的作用域 **
- 指你在哪里可以看到此变量
- 当你在函数内部定义一个变量时,该函数下面的语句将能访问到该变量,子函数也能访问这个变量。
- R在当前及其父环境中查找变量