6.1 环境
我们所创建的所有变量都需要储存在某处,即环境。
通常情况下,我们不需要和环境直接打交道。不过当你要了解变量的作用域或调试代码以检查调用栈时,掌握环境的一些基础知识将有所帮助。
(暂时忽略)
6.2 函数
6.2.1 创建和调用函数
R中,函数中计算的最后一个值将自动返回。
我们可以使用body函数可用于返回函数体。
6.2.2 向其他函数传递和接受函数
函数可以像其他变量类型一样地使用,我们将之作为其他函数的参数,并且从函数中返回。常见案例为do.call与rbind混用。
do.call(rbind, list(dfr1,dfr2,dfr3)) #和rbind(dfr1,dfr2,dfr3)一样
对于有NA值的函数的处理
只有输入值是NA时才返回NA,那可能更好。mean和sd都有一个参数na.rm,它能让我们删除计算之前的任何缺失值。为了避免所有的值都输出NA值,我们可以在noramalize中包含这个参数:
normalize <- function(x, m = mean(x, na.rm = na.rm), s = sd(x, na.rm = na.rm), na.rm = FALSE) { (x - m) / s } normalize(c(1,3,6,10,NA)) [1] NA NA NA NA NA normalize(c(1,3,6,NA,10,NA), na.rm = TRUE) [1] -1.0215078 -0.5107539 0.2553770 NA 1.2768848 NA
6.2.3 变量的作用域