R Функции

Функция — это группа инструкций, которые вместе выполняют задачу. Сам язык R предоставляет множество встроенных функций, и, конечно, мы также можем создавать свои собственные функции.

Вы можете разделить свой код на различные функции. Как вы распределяете код между разными функциями — решать вам, но логически разделение обычно основано на том, что каждая функция выполняет определённую задачу.

ОбъявлениефункцииСообщает компилятору имя функции, тип возвращаемого значения и параметры. ОпределениефункцииПредоставляет фактическое тело функции.

В R функция — это объект, который может иметь атрибуты.

Определение функций

Определение функции обычно состоит из следующих частей:

  • Имя функции:Присваивает функции уникальное имя для использования при её вызове.
  • Параметры:Определяют входные значения, принимаемые функцией. Параметры необязательны, и их может быть несколько.
  • Тело функции:Содержит фактический исполняемый блок кода, используя фигурные скобки{}чтобы заключить его.
  • Возвращаемое значение:Указывает выходной результат функции, используя ключевое словоreturn。

Определения функций в R используютfunctionключевое слово, общая форма выглядит так:

function_name <- function(arg_1, arg_2, ...) {
    # 函数体
    # 执行的代码块
    return(output)
}

Описание:

  • function_name : — это имя функции
  • arg_1, arg_2, ... : список формальных параметров

Возвращаемое значение функции используетreturn()。

Ниже приведён простой пример, показывающий, как определить и использовать функцию:

Пример

# Определить функцию сложения
add_numbers <- function(x, y) {
  result <- x + y
  return(result)
}

# Вызов функции
sum_result <- add_numbers(3, 4)
print(sum_result)  # Вывод 7

В приведённом выше коде мы определили функцию с именемadd_numbers, которая принимает два параметраxиy. Код в теле функции складывает эти два параметра и сохраняет результат в переменнойresult. Наконец, используйте ключевое словоreturn, чтобы вернуть результат.

Чтобы вызвать функцию, мы используем форму имени функции, за которой следует список параметров, чтобы передать значения параметров в функцию. В этом примере мы вызываем функциюadd_numbersи передаём аргументы 3 и 4. После выполнения функции она возвращает результат 7, который мы сохраняем в переменнойsum_resultи выводим его.

Пользовательские функции

Мы можем создавать свои собственные функции для конкретных задач, и после определения мы можем использовать их как встроенные функции.

В следующем примере показано, как определить пользовательскую функцию:

Пример

# Определить функцию для вычисления квадрата последовательности
new.function <- function(a) {
   for(i in 1:a) {
      b <- i^2
      print(b)
   }
}

Далее мы можем вызвать функцию:

Пример

new.function <- function(a) {
    for(i in 1:a) {
       b <- i^2
       print(b)
    }
 }
 
# Вызовите функцию и передайте параметры
new.function(6)

При выполнении приведенного выше кода результат будет следующим:

[1] 1
[1] 4
[1] 9
[1] 16
[1] 25
[1] 36

Мы также можем создать функцию без параметров:

Пример

new.function <- function() {
    for(i in 1:5) {
        print(i^2)
    }
}      
 
# Вызовите функцию, передавать параметры не нужно
new.function()

При выполнении приведенного выше кода результат будет следующим:

[1] 1
[1] 4
[1] 9
[1] 16
[1] 25

Функции со значениями параметров

Параметры функции можно передавать в порядке их создания при определении функции или в произвольном порядке, но необходимо указать имена параметров:

Пример

# Создаём функцию
new.function <- function(a,b,c) {
   result <- a * b + c
   print(result)
}

# Без имён параметров
new.function(5,3,11)

# С именами параметров
new.function(a = 11, b = 5, c = 3)

При выполнении приведенного выше кода результат будет следующим:

[1] 26
[1] 58

При создании функции также можно указать значения по умолчанию для параметров. Если при вызове не передавать параметры, будут использоваться значения по умолчанию:

Пример

# Создание функции с параметрами по умолчанию
new.function <- function(a = 3, b = 6) {
   result <- a * b
   print(result)
}

# Вызовите функцию без передачи параметров; будет использовано значение по умолчанию
new.function()

# Вызовите функцию, передав параметры
new.function(9,5)

При выполнении приведенного выше кода результат будет следующим:

[1] 18 [1] 45

Функции ленивых вычислений

Ленивое вычисление откладывает вычисления до тех пор, пока системе не понадобятся результаты этих вычислений. Если результаты не нужны, вычисление не будет выполнено.

По умолчанию функции R ленивы при вычислении параметров, то есть они вызываются только тогда, когда мы их вычисляем:

Пример

f <- функция(x) {
  10
}
f()

При выполнении приведенного выше кода результат будет следующим:

[1] 10

Приведённый выше код выполняется без ошибок. Хотя мы не передали параметр, параметр x не используется в теле функции, поэтому он не вызывается, и ошибка не возникает.

Пример

new.function <- function(a, b) {
   print(a^2)
   print(a)
   print(b)  # Использует b, но он не передан, поэтому возникнет ошибка
}

# Передайте один параметр
new.function(6)

При выполнении приведенного выше кода результат будет следующим:

[1] 36
[1] 6
Error in print(b) : 缺少参数"b",也没有缺省值
Calls: new.function -> print
停止执行

Встроенные функции

Язык R предоставляет множество полезных встроенных функций, которые можно использовать напрямую, не определяя их.

Например: seq(), mean(), max(), sum(x) и paste(...) и т. д.

Пример

# Вывести все числа от 32 до 44
print(seq(32,44))

# Вычислить среднее двух чисел
print(mean(25:82))

# Вычислить сумму всех чисел от 41 до 68
print(sum(41:68))

При выполнении приведенного выше кода результат будет следующим:

 [1] 32 33 34 35 36 37 38 39 40 41 42 43 44
[1] 53.5
[1] 1526

sum(): Вычислить сумму вектора или матрицы.

Пример

# Сумма вектора
x <- c(1, 2, 3, 4, 5)
total <- sum(x)
print(total)  # Вывод 15

# Сумма матрицы
matrix <- matrix(1:9, nrow = 3)
total <- sum(matrix)
print(total)  # Вывод 45

mean(): Вычислить среднее значение вектора или матрицы.

Пример

# Среднее значение вектора
x <- c(1, 2, 3, 4, 5)
avg <- mean(x)
print(avg)  # Вывод 3

# Среднее значение матрицы
matrix <- matrix(1:9, nrow = 3)
avg <- mean(matrix)
print(avg)  # Вывод 5

paste():Объединяет несколько строк в одну строку.

Пример

x <- "Hello"
y <- "World"
result <- paste(x, y)
print(result)  # Вывод "Hello World"

length():Возвращает длину вектора или количество элементов в объекте.

Пример

x <- c(1, 2, 3, 4, 5)
length_x <- length(x)
print(length_x)  # Вывод 5

matrix <- matrix(1:9, nrow = 3)
length_matrix <- length(matrix)
print(length_matrix)  # Вывод 9

str():Отображает структуру и сводку содержимого объекта.

Пример

x <- c(1, 2, 3, 4, 5)
str(x)
# Вывод:
# num [1:5] 1 2 3 4 5

matrix <- matrix(1:9, nrow = 3)
str(matrix)
# Вывод:
# int [1:3, 1:3] 1 2 3 4 5 6 7 8 9

Выше перечислена лишь небольшая часть примеров функций языка R. В R есть большое количество встроенных функций и функций, предоставляемых пакетами расширений, которые могут удовлетворять различным потребностям, таким как обработка данных, статистический анализ, построение графиков и т. д. Более подробный список функций и инструкции по использованию можно найти в официальной документации языка R.

Другие расширения