R充满了函数,它毕竟是一种函数式编程语言,但有时基本资源中没有提供您需要的精确函数。你可以设想安装一个包含这个函数的包,但是也许你的需求是如此的具体以至于没有一个预先制作的函数可以满足你的要求?那你就可以自己做了。
一个功能可能非常简单,以至于毫无意义。它甚至不需要接受一个参数:
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等)