模块课程(1/2)
编写函数
在 R 中,函数是一等公民(本身就是对象),允许您将代码构建为模块化、可重用且组织良好的块。
定义函数
要定义函数,请使用 function 关键字,并使用赋值运算符 <- 将创建的对象分配给变量(函数名称):
# Simple function definition
greet_user <- function() {
print("Hello, User!")
}
# Invoking the function
greet_user()参数和返回值
函数可以接受一个或多个参数。要显式返回值,请使用 return() 函数。如果省略 return() ,R 将自动返回函数体中最后计算的表达式的值。
# Function that adds two numbers and returns the result
add_numbers <- function(a, b) {
sum_result <- a + b
return(sum_result)
}
total <- add_numbers(5, 7)
print(total) # Prints 12默认参数
您可以为函数的参数指定默认值。如果调用函数时未提供参数,R 将使用默认值:
# The function uses a default discount rate of 10% (0.10)
apply_discount <- function(price, discount = 0.10) {
discounted_price <- price * (1 - discount)
return(discounted_price)
}
# Uses the default (10%)
print(apply_discount(100)) # Prints 90
# Specifies a custom discount (20%)
print(apply_discount(100, 0.20)) # Prints 80使用列表返回多个值
由于 R 中的函数只能通过 return() 直接返回单个对象,因此如果我们需要返回多个值(可能是不同类型或长度),我们可以将它们捆绑在一个列表中(list):
get_stats <- function(v) {
stats <- list(
mean_val = mean(v),
max_val = max(v)
)
return(stats)
}
results <- get_stats(c(10, 20, 30))
print(results$mean_val) # Prints 20匿名函数和 sapply
匿名函数(没有内联定义名称的函数)在与 sapply() 等函数配合使用时非常有用,可以对向量或列表的元素应用快速转换。
在现代 R(从版本 4.1.0 开始)中,除了经典的 function(x) 之外,您还可以使用简写语法 \(x) 定义匿名函数:
v <- c(1, 2, 3)
# Using sapply with a classic anonymous function
sapply(v, function(x) x^2) # 1 4 9
# Using sapply with shorthand syntax (R >= 4.1.0)
sapply(v, \(x) x^2) # 1 4 9自己尝试一下
定义一个名为 double_value 的函数,该函数接受单个参数 x 并使用 return() 返回其双精度 (x * 2)。
显示提示
用法:double_value <- function(x) { return(x * 2) }
3 次尝试后可用的解决方案
定义一个名为calculate_area 的函数,它接受两个参数:宽度和高度。该函数必须使用 return() 返回其乘积。
显示提示
使用参数 width 和 height 定义函数,并返回 width * height。
3 次尝试后可用的解决方案
定义一个名为calculate_tax 的函数,该函数接受必需的参数金额和可选的参数比率,默认值为 0.22。返回产品金额*费率。
显示提示
美国:calculate_tax <- function(amount, rates = 0.22) { return(amount * rates) }
3 次尝试后可用的解决方案
定义一个名为analyze_vector的函数,它接受向量v。该函数必须返回一个列表,其中包含两个名为sum(向量的总和,用sum(v)计算)和len(向量的长度,用length(v)计算)的元素。
显示提示
使用语法:analyze_vector <- function(v) { return(list(sum = sum(v), len = length(v))) }
3 次尝试后可用的解决方案
给定向量 v,使用 sapply() 函数和匿名函数将每个元素的值增加三倍(将其乘以 3)。将结果保存在变量三倍中。
显示提示
使用:三倍 <- sapply(v, function(x) x * 3)
3 次尝试后可用的解决方案