【1.4.2】Function-定义新的函数

Functions通过**function()**来定义,可以当作R对像来保存

f <- function(arguments) {#自定义各种活动}
        Functions在R中相当于“第一个类别对象”,也就是说可以像R中其他对象一样来操作它,Functions能在其他的Functions中存在,其中的参数可以被传递,其返回值是最后的结果。在Functions中,都会有相应的参数,你可以定义参数的值 ,也并不是所有的参数的值都要来定义

R中functions的参数可以通过位置来定值,也可以通过命名等式来赋值

> args(sd)
function (x, na.rm = FALSE)
NULL #args(sd),可以看到sd相应的参数
> mydata <- rnorm(100)
> sd(mydata)
> sd(x = mydata)
> sd(x = mydata, na.rm = FALSE)
> sd(na.rm = FALSE, x = mydata)
> sd(na.rm = FALSE, mydata)
不建议最后两个,他们把默认参数的位置给改变了。
> args(lm)
function (formula, data, subset, weights, na.action,
method = "qr", model = TRUE, x = FALSE,
y = FALSE, qr = TRUE, singular.ok = TRUE,
contrasts = NULL, offset, ...)
lm(data = mydata, y ~ x, model = FALSE, 1:100)
lm(y ~ x, mydata, 1:100, model = FALSE) #根据位置来定义的参数值,所以位置必须一一对应。		

大多数时候,命名参数非常有用,如果有许多参数而你又要用最后的一个参数的时候。 你可以只用记住该参数的符号,而不是该参数的位置。

f <- function(a, b = 1, c = 2, d = NULL) { }

如果你不想参数为默认值,你也可以设置为NULL.

f <- function(a, b) {
a^2
}
f(2)
这个function不使用参数b,而2又在a的位置上,所以f(2)不会报错。
f <- function(a, b) {
print(a)
print(b)
}
> f(45)
[1] 45
Error in print(b) : argument "b" is missing, with no default
>

输出了45,准备print(b),所以会报错。

该参数于是还有很多参数会在另一个functions提到 也可以不用再提取另一个function的参数,但是你有不想都写出来

myplot <- function(x, y, type = "l", ...) {
plot(x, y, type = type, ...)
}
> mean
function (x, ...)
UseMethod("mean")
> args(paste)
function (..., sep = " ", collapse = NULL)
> args(cat)
function (..., file = "", sep = " ", fill = FALSE,
labels = NULL, append = FALSE)
> args(paste)
function (..., sep = " ", collapse = NULL)
> paste("a", "b", sep = ":")
[1] "a:b"
> paste("a", "b", se = ":")
[1] "a b :"

参考资料:

Roger D. Peng的《Computing for Data Analysis》

药企,独角兽,苏州。团队长期招人,感兴趣的都可以发邮件聊聊:tiehan@sina.cn
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn