命名功能
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
时没有给出值,则将使用该值。
以上都是命名函数的例子,之所以这么称呼只是因为它们被赋予了名称(one
,two
,subtract.length
等)