R语言函数基础 #
一、函数概述 #
函数是组织好的、可重复使用的代码块,用于执行特定任务。
二、定义函数 #
2.1 基本语法 #
r
function_name <- function(parameters) {
return(value)
}
2.2 简单函数 #
r
say_hello <- function() {
print("Hello, R!")
}
say_hello()
2.3 带参数的函数 #
r
greet <- function(name) {
print(paste("Hello,", name))
}
greet("张三")
2.4 带返回值的函数 #
r
add <- function(a, b) {
return(a + b)
}
result <- add(10, 20)
print(result)
2.5 隐式返回 #
r
multiply <- function(a, b) {
a * b
}
multiply(5, 6)
三、函数参数 #
3.1 位置参数 #
r
add <- function(a, b, c) {
a + b + c
}
add(1, 2, 3)
3.2 关键字参数 #
r
add <- function(a, b, c) {
a + b + c
}
add(a = 1, b = 2, c = 3)
add(c = 3, a = 1, b = 2)
3.3 默认参数 #
r
greet <- function(name, greeting = "Hello") {
paste(greeting, name)
}
greet("张三")
greet("张三", "Hi")
3.4 可变参数 (…) #
r
sum_all <- function(...) {
args <- list(...)
sum(unlist(args))
}
sum_all(1, 2, 3, 4, 5)
3.5 混合参数 #
r
my_func <- function(a, b = 10, ...) {
extra <- list(...)
list(a = a, b = b, extra = extra)
}
my_func(1, 2, 3, 4, 5)
四、返回值 #
4.1 单个返回值 #
r
square <- function(x) {
return(x ^ 2)
}
square(5)
4.2 多个返回值 #
r
stats <- function(x) {
list(
mean = mean(x),
sd = sd(x),
min = min(x),
max = max(x)
)
}
result <- stats(c(1, 2, 3, 4, 5))
print(result$mean)
print(result$sd)
4.3 条件返回 #
r
check_positive <- function(x) {
if (x > 0) {
return("正数")
} else if (x < 0) {
return("负数")
} else {
return("零")
}
}
check_positive(10)
check_positive(-5)
check_positive(0)
4.4 提前返回 #
r
divide <- function(a, b) {
if (b == 0) {
return(NA)
}
a / b
}
divide(10, 2)
divide(10, 0)
五、函数调用 #
5.1 直接调用 #
r
add(1, 2)
5.2 使用do.call #
r
args <- list(1, 2)
do.call(add, args)
params <- list(a = 1, b = 2, c = 3)
do.call(sum, params)
5.3 匿名函数调用 #
r
(function(x) x ^ 2)(5)
(function(a, b) a + b)(3, 4)
六、函数文档 #
6.1 注释文档 #
r
calculate_bmi <- function(weight, height) {
weight / height ^ 2
}
calculate_bmi(70, 1.75)
6.2 查看函数源码 #
r
mean
print
七、函数类型 #
7.1 普通函数 #
r
add <- function(a, b) a + b
7.2 匿名函数 #
r
sapply(1:5, function(x) x ^ 2)
7.3 闭包 #
r
make_counter <- function() {
count <- 0
function() {
count <<- count + 1
count
}
}
counter <- make_counter()
counter()
counter()
7.4 递归函数 #
r
factorial <- function(n) {
if (n <= 1) return(1)
n * factorial(n - 1)
}
factorial(5)
八、实践示例 #
8.1 数据处理函数 #
r
normalize <- function(x, method = "minmax") {
if (method == "minmax") {
(x - min(x)) / (max(x) - min(x))
} else if (method == "zscore") {
(x - mean(x)) / sd(x)
} else {
stop("未知的标准化方法")
}
}
x <- c(10, 20, 30, 40, 50)
normalize(x)
normalize(x, "zscore")
8.2 统计函数 #
r
describe <- function(x) {
data.frame(
n = length(x),
mean = mean(x),
sd = sd(x),
min = min(x),
max = max(x),
median = median(x)
)
}
describe(c(1, 2, 3, 4, 5))
8.3 数据验证函数 #
r
validate <- function(x, min_val = 0, max_val = 100) {
if (!is.numeric(x)) {
stop("输入必须是数值")
}
if (any(x < min_val) || any(x > max_val)) {
warning(paste("值超出范围 [", min_val, ",", max_val, "]"))
}
TRUE
}
validate(c(10, 20, 30))
九、总结 #
本章学习了:
- 函数的定义和调用
- 参数类型:位置、关键字、默认、可变
- 返回值处理
- 函数文档编写
- 匿名函数和闭包
- 递归函数
函数是代码复用和模块化的基础,掌握函数编程是R语言的核心技能!
最后更新:2026-03-27