Главная страница

ИАД. 1. Введение в систему R


Скачать 0.82 Mb.
Название1. Введение в систему R
Дата21.12.2021
Размер0.82 Mb.
Формат файлаpdf
Имя файлаlab1(R).pdf
ТипДокументы
#312747
страница1 из 2
  1   2

1. Введение в систему R
1.1. Основы работы с системой R
При запуске программы RGui появляется основное окно программы, содер- жащее подокно, называемое R Console. Это командное окно (консоль), в кото- ром пользователь вводит команды, а система печатает результаты. В процессе работы в основном окне будет появляться другие окна, в частности, окна ре- дактора скриптов, графические окна, в которых изображаются графические результаты выполнения команд, и др. Команды вводятся пользователем (в командном окне) после приглашения, которое имеет вид
>
Команда поступает системе на обработку, как только пользователь нажал
Enter
. В одной строке можно набрать несколько команд, разделяя их сим- волом ; (точка с запятой). Если клавиша Enter нажата, а команда еще не завершена, то приглашение приобретает вид
+
В дальнейшем тексте любая строка, начинающаяся с >, означает клавиатур- ный ввод: вам необходимо набрать то, что напечатано после >, но без знака >.
Символ + продолжения команды в настоящем тексте мы будем всегда опус- кать.
Часть строки, начинающаяся с символа # и заканчивающаяся концом стро- ки (там, где вы нажали Enter), — это комментарии. Они игнорируются си- стемой.
Чтобы получить справку о функции, имя которой вам известно, нужно набрать
> help(имя-функции)
Имя интересующей вас функции может стоять в кавычках (одинарных или двойных) или без кавычек. Например,
> help("lm")
> help(’lm’)
> help(lm)
Если справка по указанной функции имеется, то откроется новое окно с со- держимым этой справки. Справка доступна также через пункт меню Help.
R поддерживает работу с историей команд. В командной строке с помо- щью клавиш «стрелка вверх» и «стрелка вниз» можно прокручивать (в обоих направлениях) список всех введенных ранее команд. Как только нужная ко- манда найдена, ее можно отредактировать, используя клавиши Del, «стрелка влево», «стрелка вправо» и алфавитно-цифровые клавиши.

Если команды записаны в некотором файле, например, myprog.r, то запу- стить из на выполнение можно с помощью команды
> source("myprog.r")
Эта возможность доступна также через меню File.
Чтобы перенаправить весь вывод в файл, скажем, myprog.out, восполь- зуйтесь командой
> sink("myprog.out")
Восстановить вывод на консоль можно командой
> sink()
Для выхода из R нужно набрать
> q()
или воспользоваться меню.
1.2. Числа
Основным типом данных в системе R является число с плавающей точкой двойной точности. Для отделения дробной части от целой используется точ- ка. Показатель отделяется от мантиссы символом e или E. Например, 31415,
+3.1415e4
, .31415e+5, 3141500e-2 — разные записи одного и того же числа
31415.
Над числами можно выполнять обычные арифметические операции: +, -,
*
, /, ^ (степень), %/% (целочисленное деление), %% (остаток от деления). Опера- ции имеют обычный приоритет. В выражениях используются круглые скобки.
Набранное в командной строке арифметическое выражение после нажатия на
Enter вычисляется и результат сразу же отображается:
>
2*(7-9)^8+6/3
[1] 514
Ответ — это 514. Смысл [1] будет ясен из дальнейшего.
Элементарные функции, разумеется, реализованы. Вот (неполный) список:
абсолютное значение abs, квадратный корень sqrt, экспонента e x
exp
, нату- ральный логарифм ln x log, десятичный логарифм log
10
x log10, двоичный логарифм log
2
x log2, тригонометрические функции sin, cos, tan, обратные тригонометрические функции asin, acos, atan. Аргумент функций записыва- ется в круглых скобках. Например,
> exp(1)
[1] 2.718282
> (sqrt(5) + 1)/2
[1]
1.618034
> sin(pi/2)
[1] 1 3
где pi — это константа π. Если у функции несколько аргументов, то они отделяются знаком , (запятая). Например, atan2(y, x) возвращает угол между осью Ox и вектором (x, y).
Доступны следующие функции округления. Функция ceiling(x) нахо- дит минимальное целое, не меньшее x (округление в сторону +∞). Функция floor(x)
возвращает максимальное целое, не превосходящее x (округление в сторону −∞). Функция trunc(x) отбрасывает дробную часть (округление в сторону 0). Функция round(x) округляет к ближайшему целому. Функция round(x, dig)
с дополнительным параметром dig указывает, что необходимо осуществить округление до заданного знака после запятой.
Особую роль в R играют следующие объекты: бесконечность Inf, «не- число» NaN, «отсутствующее значение» NA. Бесконечность Inf (может иметь также отрицательный знак) получается при переполнениях и операциях ви- да 1/0 и т. п. «Не-число» NaN возникает как результат операций вида 0/0,
Inf-Inf и т. п. Если в результате вычислений получается NaN, то R выдает предупреждение. Значение NA (not available) означает, что значение не до- ступно. Пользователь сам может в выражениях использовать Inf, NaN и NA.
Любое числовое значение можно приписать какой-либо переменной. Эту переменную можно использовать в последующих командах
1
. Например,
> x <- sqrt(5)
> phi <- (x + 1)/2
Здесь x и phi — это имена переменных, а знак <-, означающий присваива- ние
2
, состоит из двух символов: < и -. Заметим, что присваиваемые значения не будут напечатаны в командном окне. Чтобы посмотреть на присвоенное значение, нужно еще раз набрать имя переменной. Например,
> phi
[1]
1.618034
Имена переменных (идентификаторы) в R состоят из строчных и заглав- ных букв
3
, цифр и знаков . (точка) и _ (подчеркивание). Идентификатор не может начинаться с цифры, и если он начинается с точки, то цифра не мо- жет быть его вторым символом
4
. R чувствителен к регистру, т. е. строчные и заглавные буквы в нем различаются. Например, имена phi и Phi относятся к разным переменным.
Список всех имеющихся на данный момент переменных можно получить с помощью функции ls(). Удалить переменную можно с помощью функции
1
Никогда ничего не присваивайте переменной pi. Иначе у вас не будет доступа к кон- станте π.
2
Вместо <- можно использовать =. Кроме того, возможно присваивание в виде (x + 1)/2
-> phi.
3
Можно даже использовать кириллицу, если ваша операционная система ее поддержи- вает, но для переносимости программ лучше этого не делать.
4
Мы были удивлены, когда обнаружили, что в R возможны переменные, имена которых состоят только из точек — по-видимому, из любого их количества, но не трех. Лексема ... в
R используется для других целей. Разумеется, мы не рекомендуем использовать переменные с такими именами.
4
ls()
rm()
, перечислив в списке аргументов имена переменных, подлежащих уда- лению.
1.3. Числовые векторы
Векторы в R формируются функцией c(). Аргументы этой функции суть компоненты вектора. Например, команда
> c(1, 2, 3, 4, 5)
[1] 1 2 3 4 5
формирует вектор-строку (1, 2, 3, 4, 5). Разумеется, векторы можно при- сваивать переменным:
> a = c(1, 2, 3, 4, 5)
Аргументами функции c() могут являться векторы. В этом случае как результат получаем конкатенацию этих векторов. Скалярные значения (т. е.
числа) воспринимаются R как векторы длины 1. Таким образом, аргументами функции c() могут быть как векторы, так и скаляры. Например,
> c(c(1, 2, 3, 4, 5), 6, c(7, 8))
[1] 1 2 3 4 5 6 7 8
Вектор, состоящий из последовательных чисел, можно получить с помо- щью команды <начальное-значение>:<конечное-значение>. Например, 1:5.
На эту команду похожа функция seq, которая генерирует отрезки арифмети- ческой прогрессии. Можно задать начальное значение, конечное значение и шаг:
> seq(0, 1, by = 0.1)
[1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
В другом варианте задается начальное значение, конечное значение и количе- ство точек. В результате будет сгенерирован вектор, состоящий из заданного числа компонент, равномерно распределенных на заданном отрезке:
> seq(0, 1, len = 11)
[1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
Функция rep(v, k) создает вектор, состоящий из k копий вектора v. На- пример,
> rep(c(1, 2), 3)
[1] 1 2 1 2 1 2
Функция runif(n) создает вектор указанной длины со случайными эле- ментами, равномерно распределенными на отрезке [0, 1] Функция rnorm(n)
создает вектор указанной длины n со случайными элементами, распределен- ными по нормальному закону с математическим ожиданием 0 и дисперсией
1.
Элементы вектора могут иметь значения Inf, NaN, NA. Например,
5
rm()
,
c()
seq
,
rep(v, k)
runif(n)
создает rnorm(n)

> age = c(23, NA, NA, 18, 19)
Над векторами можно выполнять арифметические операции и элементар- ные функции. Бинарная операция над двумя векторами одинаковой длины производится почленно над каждой парой элементов, и результатом является вектор, состоящий из результатов этого действия. В случае, когда размерность векторов не совпадает, производится приведение длины более короткого век- тора к длине длинного. Приведение выполняется следующим образом: вектор приобретает длину, такую же, как и у более длинного, и содержимое этих новых элементов берётся из содержимого старых элементов вектора, повто- ряемых циклически.
> c(1, 2, 3, 4) + c(1, 2)
[1] 2 4 4 6
> c(1, 2, 3, 4) - c(1, 2)
[1] 0 0 2 2
> c(1, 2, 3, 4) * c(1, 2)
[1] 1 4 3 8
> c(1, 2, 3, 4)/c(1, 2)
[1] 1 1 3 2
> c(1, 2, 3, 4)^c(1, 2)
[1]
1 4
3 16
> c(1, 2, 3, 4)/c(1, 0)
[1]
1 Inf
3 Inf
> 2*c(1, 2, 3, 4, 5)
[1]
2 4
6 8 10
Если длина короткого вектора не кратна длине более длинного, то выдается предупреждение, но результат вычисляется. Например,
> c(3, 1, 4, 1, 5, 9, 2) + c(9, 5)
[1] 12 6 13 6 14 14 11
Элементарные математические функции применяются к каждой компо- ненте вектора. Например,
> x = c(0, pi/2, pi)
> sin(x)
[1] 0.000000e+00 1.000000e+00 1.224606e-16
Доступ к элементам вектора осуществляется оператором [i]. Например,
u[5]
— это 5-й элемент вектора u. Нумерация элементов начинается с 1. Вы- ражения вида u[i] могут встречаться и в левой части от знака присваивания.
При этом если вектор имеет длину не меньше i, то u[i] просто примет новое значение. В противном случае вектор u увеличит свою длину до i, компонента u[i]
примет новое значение, а остальные новые компоненты примут значения
NA
> u <- 1 6
Бинарная операция над двумя векторами одинаковой длины производится почленно над каждой парой элементов, и резуль резу резу татом является вектор, состоящий из резуль резу резу татов этого действия. В случае, когда ог размерность векторов не совпадает, производится приведение длины более короткого век- тора к длине длинного.
Элементарные математические функции применяются к каждой компо- ненте вектора.
Доступ к элементам вектора осуществляется оператором [i].

> u[5] <- 5
> u
[1]
1 NA NA NA
5
Некоторые полезные функции:
sum(v)
— сумма элементов вектора v;
prod(v)
— произведение компонент вектора v;
max(v)
— максимальный элемент;
min(v)
— минимальный элемент;
length(v)
— длина вектора;
mean(v)
— среднее значение элементов вектора v (оценка математического ожидания);
var(v)
— вариация элементов вектора v (оценка дисперсии);
sort(v)
— возвращает вектор той же длины, что и v, с элементами, отсор- тированными в порядке возрастания.
1.4. Логические векторы
R умеет работать с логическими векторами (и, следовательно, с логиче- скими скалярми), элементы которого могут иметь значения TRUE и FALSE, а также значение NA. Логические векторы получаются в результате сравнений и применения к логическим векторам логических функций. Операции сравне- ния — это <, <=, >, >=, == (для равенства) и !=(для неравенства). Логические функции — это & (и), | (или), ! (не). Операнды могут иметь разную длину.
Сравнения и логические функции выполняются покомпонентно и, если тре- буется, с циклическим сдвигом, как и в случае арифметических операций.
Например,
> young <- (age >= 2) & (age <= 50)
создает логический вектор young той же длины, что и age, с компонентами,
равными TRUE, где условие выполнено, и FALSE, где условие не выполнено.
> age = c(1, 2, NA, Inf, NaN, 18, 19)
> young <- (age >= 2) & (age <= 50)
> young
[1] FALSE
TRUE
NA FALSE
NA
TRUE
TRUE
Логические векторы могут использоваться в обычной арифметике. При этом TRUE интерпретируется как 1, а FALSE как 0.
Функция is.na(a) возвращает логический вектор той же длины, что и a,
с компонентами, равными FALSE, где соответствующие значения a равны NaN
или NA, и TRUE в остальных случаях. Функция is.nan(a) возвращает логи- ческий вектор той же длины, что и a, с компонентами, равными FALSE, где соответствующие значения a равны NaN, и TRUE в остальных случаях. Напри- мер,
> a = c(0, 1, Inf, NaN, NA)
7
sum(v)
prod(v)
max(v)
min(v)
length(v)
mean(v)
var(v)

sort(v)
is.na(a)
is.nan(a)

> is.na(a)
[1] FALSE FALSE FALSE
TRUE
TRUE
> is.nan(a)
[1] FALSE FALSE FALSE
TRUE FALSE
1.5. Символьные векторы
Чтобы определить в R строку символов, достаточно заключить ее в двой- ные или одинарные кавычки. При этом \n означает переход на новую строку,
\t
— табуляцию, \b — возврат на символ назад, \\ — символ \, \" — символ ",
\’
— символ ’. Из отдельных строк можно компоновать векторы. Например,
> label = c("Petal width", "Petal length")
> label
[1] "Petal width"
"Petal length"
Конкатенацию строк осуществляет функция paste. В простейшем вари- анте, например, происходит склейка указанных строк со вставкой в качестве разделителя пробела. Например,
> paste("Sepal width", "Sepal length", "Petal width",
"Petal length")
[1] "Sepal width Sepal length Petal width Petal length"
Если аргументы функции paste — массивы, то склеиваются соответствующие компоненты. При этом, если длины массивов различны, происходит цикличе- ская подстановка меньшего из них. Например,
> paste(c("Sepal", "Petal"), c("width", "length"))
[1] "Sepal width"
"Petal length"
> paste(c("Sepal", "Petal"),
c("width", "width", "length", "length"))
[1] "Sepal width"
"Petal width"
"Sepal length"
"Petal length"
Если один из векторов — числовой, то он автоматически будет конвертирован в символьный:
> paste("x", 1:5)
> [1] "x 1" "x 2" "x 3" "x 4" "x 5"
Можно заменить разделитель на другой:
> paste("x", 1:5, sep = "")
> [1] "x1" "x2" "x3" "x4" "x5"
8
paste

1.6. Строковые наименования элементов вектора
Элементам вектора (числового, логического, символьного) можно задавать имена. Например,
> fruit <- c(5, 10, 1, 20)
> names(fruit) <- c("orange", "banana", "apple", "peach")
> fruit orange banana apple peach
5 10 1
20
Мы создали вектор длины 4, компоненты которого имеют указанные назва- ния. Теперь обращаться к элементам вектора можно как по индексу, так и по имени:
> fruit[1] <- 6
> fruit["peach"] <- 60
> fruit orange banana apple peach
6 10 1
60 1.7. Векторы в качестве индексов
Пусть v — некоторый вектор (числовой, логический, символьный). Напом- ним, что обращение к конеретному элементу этого вектора осуществляется с помощью команды индексирования v[i]. Оказывается, что в качестве индекса i
здесь может выступать не скаляр, а вектор. В этом случае генерируется срез исходного вектора v, состоящий из тех его компонент, которые удовлетворяют определенным условиям.
Как будет интерпретирован вектор, рассматриваемый в качестве индекса,
зависит от его типа. Возможны следующие случаи.

i
— это логический вектор. В этом случае длины векторов i и v должны совпадать. В результате v[i] — это вектор, сформированный из тех и только тех компонент вектора v, для которых соответствующее значение в i есть TRUE.

i
— это вектор с положительными целыми значениями. В этом случае компоненты вектора i интерпретируются как обычные индексы и v[i]
— это вектор, сформированный из соответствующих компонент вектора v
в той последовательности, в которой они указаны в i.

i
— это вектор с отрицательными целыми значениями. Абсолютные зна- чения вектора i интерпретируются как номера компонент, которые ис- ключаются из v.

i
— это символьный вектор. Его значения интерпретируются как имена компонент вектора v. В результате v[i] — это вектор, сформированный
9
names(fruit)
fruit[1]
fruit["peach"]
из соответствующих компонент вектора v в той же последовательности,
в которой они указаны в i.
Рассмотрим примеры:
> y <- x[!is.na(x)]
формирует вектор y только из инициализированных некоторым значением (не
NaN
и NA) компонент вектора x.
Команда
> x[is.na(x)] <- 0
заменяет отсутствующие значения нулями.
Выражение
> z <- (x + 1)[(!is.na(x)) & x > 0]
создает вектор z и размещает в нем элементы вектора x + 1, удовлетворяю- щие приведенным условиям.
Команда
> x[1:10]
формирует вектор из первых 10 компонент вектора x (предполагается, что длина вектора x больше 10).
Команда
> x <- x[-(1:5)]
удаляет из x первые 5 компонент.
Приведем еще один пример. Пусть f — вектор, содержащий протабули- рованные значения некоторой функции в точках, хранящихся в x. Требуется найти корни функции. Это можно сделать следующим образом:
> n <- length(x)
> w <- 1:(n - 1)
> x(f[w] == 0 | (f[w]*f[w + 1] < 0))
1.8. Графики функций
Для изображения графиков функций в R есть функция plot(x, y). Здесь x
— вектор значений абсцисс и y — вектор значений ординат. Если указан только один аргумент — plot(y), то предполагается, что x=1:n, где n — длина вектора y. Например, команды
> x = seq(-pi, pi, len = 30)
> y = sin(x)
> plot(x, y)
10
x[is.na(x)] <- 0
Приведем еще один пример. Пусть f — вектор, содержащий протабули- абу абу рованные значения некоторой функции в точках, хранящихся в x x
. Требуется найти корни функции. Это можно сделать следующим образом:
> n <- length(x)
> w <- 1:(n - 1)
> x(f[w] == 0 | (f[w]*f[w + 1] < 0))
plot(x, y)

−3
−2
−1 0
1 2
3
−1.0
−0.5 0.0 0.5 1.0
x y
Рис. 1.1.
«Точечный» график синуса рисуют 30 точек, лежащих на синусоиде y = sin(x); см. рис. 1.1. Графики по- явлются в отдельном окне (или в нескольких отдельных окнах), называемых графическими устройствами.
Функция plot допускает множество дополнительных параметров. Вот неко- торые из них.

log = "x"
или log = "y" или log = "xy" делает соответственно мас- штаб по оси абсцисс, ординат или по обеим осям логарифмическим;

type = тип-графика позволяет указать тип выводимого графика; неко- торые значения параметра — "p" (точки, по умолчанию), "l" (линии),
"b"
(линии и точки), "o" (линии и точки перекрываются), "n" (ничего не рисуется);

xlab = название-оси-абсцисс и ylab = название-оси-ординат позво- ляет указать подписи к оси абсцис и ординат соответственно;

main = основная-надпись и sub = дополнительная-надпись создают над- писи сверху и снизу графика;

col = цвет задает цвет графика; возможны значения "blue", "red",
"green"
, "cyan", "magenta", "yellow", "black" и многие другие. Можно
11
log type xlab main col

−3
−2
−1 0
1 2
3
−1.0
−0.5 0.0 0.5 1.0
  1   2


написать администратору сайта