freeCodeCamp/guide/russian/r/functions/index.md

179 lines
7.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
title: Functions in R
localeTitle: Функции в R
---
Функция позволяет вам определить многоразовый блок кода, который может выполняться многократно в вашей программе.
Функции могут быть названы и вызываться повторно или могут выполняться анонимно на месте (аналогично лямбда-функциям в python).
Для полного понимания функций R требуется понимание среды. Среды - это просто способ управления объектами. Примером среды в действии является то, что вы можете использовать избыточную переменную имя внутри функции, которое не будет затронуто, если большая среда выполнения уже имеет одну и ту же переменную. Кроме того, если функция вызывает переменную, не определенную внутри функции, которая будет проверять среду более высокого уровня для этой переменной.
### Синтаксис
В R определение функции имеет следующие функции:
1. Ключевое слово `function`
2. имя функции
3. входные параметры (необязательно)
4. некоторый блок кода для выполнения
5. оператор возврата (необязательно)
```{r}
# a function with no parameters or returned values
sayHello() = function(){
"Hello!"
}
sayHello() # calls the function, 'Hello!' is printed to the console
# a function with a parameter
helloWithName = function(name){
paste0("Hello, ", name, "!")
}
helloWithName("Ada") # calls the function, 'Hello, Ada!' is printed to the console
# a function with multiple parameters with a return statement
multiply = function(val1, val2){
val1 * val2
}
multiply(3, 5) # prints 15 to the console
```
Функции - это блоки кода, которые можно повторно использовать, вызывая функцию. Это позволяет простое, элегантное повторное использование кода без явного переписывания разделов кода. Это делает код более читаемым, упрощает отладку и ограничивает ошибки ввода.
Функции в R создаются с использованием ключевого слова `function` вместе с именем функции и параметрами функции в круглых скобках.
Функция `return()` может использоваться функцией для возврата значения и обычно используется для принудительного досрочного завершения функции с возвращаемым значением. В качестве альтернативы, функция вернет окончательное напечатанное значение.
```{r}
# return a value explicitly or simply by printing
sum = function(a, b){
c = a + b
return(c)
}
sum = function(a, b){
a + b
}
result = sum(1, 2)
# result = 3
```
Вы также можете определить значения по умолчанию для параметров, которые R будет использовать, когда переменная не указана во время вызова функции.
```{r}
sum = function(a, b = 3){
a + b
}
result = sum(a = 1)
# result = 4
```
Вы также можете передать параметры в том порядке, который вы хотите, используя имя параметра.
```{r}
result = sum(b=2, a=2)
# result = 4
```
R также может принимать дополнительные необязательные параметры с помощью «...»
```{r}
sum = function(a, b, ...){
a + b + ...
}
sum(1, 2, 3) #returns 6
```
Функции также могут выполняться анонимно. Они очень полезны в сочетании с семейством функций «apply».
```{r}
# loop through 1, 2, 3 - add 1 to each
sapply(1:3,
function(i){
i + 1
})
```
### Заметки
* Если определение функции включает аргументы без заданных значений по умолчанию, значения этих значений должны быть включены.
```{r}
sum = function(a, b = 3){
a + b
}
sum(b = 2) # Error in sum(b = 2) : argument "a" is missing, with no default
```
* Переменные, определенные внутри функции, существуют только в пределах этой функции, но будут проверять большую среду, если переменная не указана
```{r}
double = function(a){
a * 2
}
double(x) # Error in double(x) : object 'x' not found
double = function(){
a * 2
}
a = 3
double() # 6
```
## Встроенные функции в R
* R поставляется со многими функциями, которые вы можете использовать для выполнения сложных задач, таких как случайные выборки.
* Например, вы можете округлить число с помощью `round()` или вычислить его факториал с `factorial()` .
```r
> round(4.147)
[1] 4
> factorial(3)
[1] 6
> round(mean(1:6))
[1] 4
```
* Данные, которые вы передаете в функцию, называются аргументом функции.
* Вы можете моделировать рулон матрицы с помощью функции R `sample()` . Функция `sample()` принимает два аргумента: вектор с именем x и число с именем size. Например:
```r
> sample(x = 1:4, size = 2)
[] 4 2
> sample(x = die, size = 1)
[] 3
>dice <- sample(die, size = 2, replace = TRUE)
>dice
[1] 2 4
>sum(dice)
[1] 6
```
* Если вы не знаете, какие имена использовать с функцией, вы можете найти функцию аргументы с аргументами.
```r
> args(round)
[1] function(x, digits=0)
```
## Ресурсы
[Официальные документы](https://cran.r-project.org/manuals.html) [Quick-R](https://www.statmethods.net/management/functions.html) [CRAN](https://cran.r-project.org/doc/manuals/r-release/R-lang.html#Functions) [Расширенные функции R: функции](http://adv-r.had.co.nz/Functions.html)