English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Функции в языке R

Функция - это группа выражений, выполняемых вместе для выполнения задачи. Язык R himself предоставляет множество встроенных функций,当然我们也 можем создать свои собственные функции.

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

ФункцияДекларацияИнформирует компилятор о نامе функции, типе возвращаемого значения и параметрах. ФункцияОпределениеПредоставляет фактическое тело функции.

Функции в языке R являются объектами и могут иметь атрибуты.

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

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

function_name <- function(arg_1, arg_2, ...) {
    // Тело функции
}

Описание:

  • function_name : имя функции

  • arg_1, arg_2, ... : список формальных параметров

Значение функции возвращается с помощью return().

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

Язык 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

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

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

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

# Определение функции для подсчета系列的 квадратов
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)
    }
}       
 
# Вызов функции, без передачи параметров
# Вызов функции, не передавая параметров, будут использоваться значения по умолчанию

Выполните следующий код, результат вывода будет:

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

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

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

# Создание функции
new.function <- function(a, b, c) {
   result <- a * b + c
   result <- a * b
}
# Без параметров по имени
# Без параметров по имени
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(9,5)

Выполните следующий код, результат вывода будет:

[1] 18 [1] 45

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

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

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

f <- function(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
Остановить выполнение