Федеральное государственное образовательное бюджетное учреждение
Высшего образования
«ФИНАН
«ФИНАНСОВЫЙ УНИВЕРСИТЕТ ПРИ ПРАВИТЕЛЬСТВЕ
РОССИЙСКОЙ ФЕДЕРАЦИИ»
Департамент анализа данных, принятия решений и финансовых технологий
С.А.Зададаев
Программирование пользовательских
Функций в R (RStudio)
Учебно-методические рекомендации для проведения
семинара №14 по компьютерному практикуму
Для бакалавров направления 38.03.01 «Экономика»
Электронное издание
Москва 2017
Программирование пользовательских функций в R (RStudio)
Задание математических функций
В языке R, как и в любом другом языке программирования, предусмотрена возможность создавать не только различные переменные, но и функции. Если рассматривать математические функции, то здесь объектом будет объявляться не конкретное число или массив, а сама формулаили специальный алгоритм, по которым предполагаются дальнейшие вычисления. Это оказывается невероятно удобным при частойреализации одних и тех же действий.
|
|
Запустим RStudio, создадим новый лист программы (например, по сочетанию Ctrl+Shift+N) и наберем или скопируем следующий код:
f<-function(x) {(x-3)^2}# Задание функции f(x)=(x-3)^2
Что произойдет, если мы отправим этот код на компиляцию (Ctrl+Enter)?
На первый взгляд R никак не отреагировал на введенный текст, однако в действительности, в памяти R создалась функция под именем , значения которой, согласно нашему коду в фигурных скобках {(x-3)^2},зависят от одной переменной следующим образом:
.
Обратите внимание на правое верхнее окно RStudio: в нем появилась только что созданная функция .
Это означает, что теперь R будет понимать обращение к этой функции для конкретных чисел. Например,вычислим значение этой функции в точке , набрав:
f(5) # Значение функции f в точке 5
В качестве аргумента введенной функции можно подставлять и целые массивы, тогда функция будет вычислена в каждой точке массива:
m <- 0:5 # Массив mцелых чисел 0,1,…4,5
f(m) # Массив значений функции f, вычисленной в точках из массива m
Как видим, строка внизу консоли Rперечисляет все значения функции. Таким образом, можно легко задавать/генерироватьконечныепоследовательности значений функции для заданных последовательностях значений аргументов.
Задание 1. Объявить в R функцию
,
где и – параметры (по умолчанию считать параметры равными единицам) и вычислить значения , и .
Решение. Наберем следующий код в окне программы:
g <-function(x, a=1, b = 1) {(x^2-a)/(x-b)} # Заданиефункцииg(x,a,b)
Если теперь в следующей строчке набрать
g(2) # Вычислениефункцииg(x=2,a=1,b=1)
|
|
мы получим вычисленное значение функции для , при этом опущенные нами параметры и будут приравнены к значениям по умолчанию, т.е. 1, объявленным ранее в аргументах function(x, a = 1, b = 1).
Вызов функции в формате:
g(-3, a=5) # Вычислениефункцииg(x=-3,a=5,b=1)
даст нам значение функции для . При этом параметр , а опущенное значение параметра будет приравнено к значению по умолчанию, т.е. 1.
Естественно, возможно и полное обращение к нашей функции, с указанием всех ее аргументов:
g(6, a=9, b=3) # Вычислениефункцииg(x=6,a=9,b=3)
Замечание 1. При вызове функции мы опускали название переменной, но не было бы ошибкой записать . Вообще, в R можно опускать названия аргументов функции, если только помнить в каком порядке они перечисляются. Так, например, команда будет эквивалента вызову функции .
Замечание 2. Попробуйте объяснить результатNaN («невычисляемо», «не число»), если ввести команду:
g(3, 9, 3) # Вычислениефункцииg(x=6,a=9,b=3)