179 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			179 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | --- | |||
|  | 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) |