R -функции


Функция — это блок кода, который запускается только при вызове.

Вы можете передавать данные, известные как параметры, в функцию.

В результате функция может возвращать данные.


Создание функции

Чтобы создать функцию, используйте function()ключевое слово:

Пример

my_function <- function() { # create a function with the name my_function
  print("Hello World!")
}

Вызов функции

Чтобы вызвать функцию, используйте имя функции, за которым следуют круглые скобки, например, my_function() :

Пример

my_function <- function() {
  print("Hello World!")
}

my_function() # call the function named my_function

Аргументы

Информация может передаваться в функции в качестве аргументов.

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

В следующем примере есть функция с одним аргументом (fname). Когда функция вызывается, мы передаем имя, которое используется внутри функции для вывода полного имени:

Пример

my_function <- function(fname) {
  paste(fname, "Griffin")
}

my_function("Peter")
my_function("Lois")
my_function("Stewie")

Параметры или аргументы?

Термины «параметр» и «аргумент» могут использоваться для одного и того же: информации, которая передается в функцию.

С точки зрения функции:

Параметр — это переменная, указанная в скобках в определении функции.

Аргумент — это значение, которое передается функции при ее вызове.



Количество аргументов

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

Пример

Эта функция ожидает 2 аргумента и получает 2 аргумента:

my_function <- function(fname, lname) {
  paste(fname, lname)
}

my_function("Peter", "Griffin")

Если вы попытаетесь вызвать функцию с 1 или 3 аргументами, вы получите ошибку:

Пример

Эта функция ожидает 2 аргумента и получает 1 аргумент:

my_function <- function(fname, lname) {
  paste(fname, lname)
}

my_function("Peter")

Значение параметра по умолчанию

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

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

Пример

my_function <- function(country = "Norway") {
  paste("I am from", country)
}

my_function("Sweden")
my_function("India")
my_function() # will get the default value, which is Norway
my_function("USA")

Возвращаемые значения

Чтобы функция возвращала результат, используйте return()функцию:

Пример

my_function <- function(x) {
  return (5 * x)
}

print(my_function(3))
print(my_function(5))
print(my_function(9))

Вывод кода выше будет:

[1] 15
[1] 25
[1] 45

Вложенные функции

Существует два способа создания вложенной функции:

  • Вызов функции внутри другой функции.
  • Напишите функцию внутри функции.

Пример

Вызов функции внутри другой функции:

Nested_function <- function(x, y) {
  a <- x + y
  return(a)
}

Nested_function(Nested_function(2,2), Nested_function(3,3))

Объяснение примера

Функция говорит x добавить y.

Первый вход Nested_function(2,2) — это «x» основной функции.

Второй вход Nested_function(3,3) — это «y» основной функции.

Таким образом, выход равен (2+2) + (3+3) = 10 .

Пример

Напишите функцию внутри функции:

Outer_func <- function(x) {
  Inner_func <- function(y) {
    a <- x + y
    return(a)
  }
  return (Inner_func)
}
output <- Outer_func(3) # To call the Outer_func
output(5)

Объяснение примера

Вы не можете вызвать функцию напрямую, потому что Inner_func был определен (вложен) внутри Outer_func.

Нам нужно сначала вызвать Outer_func, чтобы вызвать Inner_func в качестве второго шага.

Нам нужно создать новую переменную с именем output и присвоить ей значение, которое здесь равно 3.

Затем мы печатаем вывод с желаемым значением «y», которое в данном случае равно 5.

Таким образом, выход равен 8 (3 + 5).


Рекурсия

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

Рекурсия является общей математической и программной концепцией. Это означает, что функция вызывает сама себя. Преимущество этого заключается в том, что вы можете перебирать данные для достижения результата.

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

В этом примере tri_recursion()это функция, которую мы определили для вызова самой себя («рекурсия»). Мы используем kпеременную в качестве данных, которые уменьшаются ( -1) каждый раз, когда мы рекурсивно. Рекурсия заканчивается, когда условие не больше 0 (т.е. когда оно равно 0).

Новому разработчику может потребоваться некоторое время, чтобы понять, как именно это работает, лучший способ узнать это - протестировать и изменить его.

Пример

tri_recursion <- function(k) {
  if (k > 0) {
    result <- k + tri_recursion(k - 1)
    print(result)
  } else {
    result = 0
    return(result)
  }
}
tri_recursion(6)