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