命名功能

R 充满了函数,它毕竟是一种函数式编程语言 ,但有时候 Base 资源中没有提供所需的精确函数。你可以想象安装一个包含该功能的软件包 ,但是你的要求可能是如此具体,以至于没有预制功能符合要求?然后你可以选择制作自己的。

一个函数可以非常简单,直到几乎没有意义。它甚至不需要争论:

one <- function() { 1 }
one()
[1] 1

two <- function() { 1 + 1 }
two()
[1] 2

花括号 { } 之间的关系是正确的功能。只要你可以将所有东西放在一条线上,它们就不是严格需要的,但对于保持组织有用是有用的。

功能可以非常简单,但非常具体。该函数将矢量(在本例中为 vec)作为输入,并从矢量元素的每一个中减去矢量长度(在本例中为 6)的相同矢量。

vec <- 4:9
subtract.length <- function(x) { x - length(x) }
subtract.length(vec)
[1] -2 -1  0  1  2  3

请注意,length() 本身就是预先提供的(即 Base )功能。你当然可以在另一个自制函数中使用以前自制的函数,以及在跨越多行时分配变量和执行其他操作:

vec2 <- (4:7)/2

msdf <- function(x, multiplier=4) {
    mult <- x * multiplier
    subl <- subtract.length(x)
    data.frame(mult, subl)
}

msdf(vec2, 5)
  mult subl
1 10.0 -2.0
2 12.5 -1.5
3 15.0 -1.0
4 17.5 -0.5

multiplier=4 确保 4 是参数 multiplier 的默认值,如果在调用函数 4 时没有给出值,则将使用该值。

以上都是命名函数的例子,之所以这么称呼只是因为它们被赋予了名称(onetwosubtract.length 等)