sqrt (-17)
даст NaN и предупреждение, но
sqrt (-17+0i)
сделает вычисления как комплексных чисел.
2.3. Генерация регулярных последовательностей
У R есть много средств для генерации используемых последовательностей обычных чисел. Например, 1:30 является вектором c (1, 2…, 29, 30). У оператора двоеточия есть высокий приоритет в пределах выражения, таким образом, например 2*1:15 является вектором c (2, 4…, 28, 30). Введите n <-10 и сравните последовательности 1:n-1 и 1: (n-1).
Выражение 30:1 может использоваться для создания обратной последовательности.
Функция seq () является более общим средством для генерации последовательности. У нее имеется пять параметров, только некоторые из которых могут специфицироваться в любом вызове. Первые два параметра, если дано, специфицируют начало и конец последовательности, и если только эти два параметра, то результат аналогичен оператору двоеточия. Например, seq (2,10) дает такой же вектор как 2:10.
Аргументы для seq () и ко многим другим функциям R, могут также быть даны в именованной форме, когда порядок, в котором они появляются, не важен. Первые два аргумента можно назвать from=value и to=value; таким образом, seq (1,30), seq (from=1, to=30) и seq (to=30, from=1) являются одинаковыми с 1:30. Следующие два аргумента для seq () можно назвать by=value и length=value, которые специфицируют размер шага и длину для последовательности соответственно. Если ни один из них не дан, то по умолчанию предполагается by=1.
Например:
> seq (-5, 5, by=.2) -> s3
генерирует вектор c (-5.0, -4.8, -4.6, …, 4.6, 4.8, 5.0). Подобно этому:
> s4 <– seq (length=51, from=-5, by=.2)
генерируется аналогичный вектор.
Пятый аргумент можно назвать along=vector, который используется как единственный аргумент и создает последовательность 1, 2…, length (вектор), или пустую последовательность, если вектор пуст (такое тоже может быть).
Соответствующая функция rep (), которую можно использоваться для тиражирования объекта различными сложными способами. Самая простая форма:
> s5 <– rep (x, times=5)
которая поместит пять копий x от начала до конца в s5. Другая полезная версия
> s6 <– rep (x, each=5)
которая повторит каждый элемент х пять раз перед пересылкой в следующую.
2.4. Логические векторы
Так же как числовые векторы, R позволяет манипулирование логическими величинами. У элементов логического вектора могут быть значение TRUE, FALSE, и NA (для «не доступно», см. ниже). Первые два часто сокращаются как T и F, соответственно. Заметим, однако, что T и F – только переменные, которые установлены в TRUE и FALSE по умолчанию, но не зарезервированные слова и, следовательно, могут быть перезаписаны пользователем. Следовательно, следует всегда использовать TRUE и FALSE.
Логические векторы генерируются условиями. Например:
> temp <– x> 13
устанавливает temp как вектор одинаковой длины как x со значением FALSE, соответствующих тем элементам x, где условие не соблюдается, и TRUE, где имеет место.
Логическими операторами являются <, <=,>,> =, == для точного равенства и!= для неравенства. Кроме того, если c1 и c2 – логические выражения, то c1&c2 – их пересечение («и»), c1|c2 – их объединение («или»), и!c1 – отрицание c1.
Логические векторы могут использоваться в обычной арифметике, в том случае они преобразуются в числовые векторы, FALSE равно 0 и TRUE равно 1. Однако есть ситуации, где логические векторы и их преобразованные числовые дубликаты не эквивалентны, например см. следующий подраздел.
2.5. Пропущенные значения
В некоторых случаях компоненты вектора не могут быть полностью известны. Когда элемент или значение «не доступно» или «отсутствует значение» в статистическом смысле, место в пределах вектора может быть зарезервировано, присваивая ему специальное значение NA. Вообще любое действие с NA дает NA. Обоснование этого правила просто состоит в том, что, если спецификация действия является неполной, то результат не может быть известен и, следовательно, не доступен.
Функция is.na (x) дает логический вектор одинакового размера с x со значением TRUE, если и только если соответствующий элемент в x равен NA.
> z <– c (1:3,NA); ind <– is.na (z)
Заметим, что логическое выражение x == NA очень отличается от is.na (x), так как NA не действительно значение, а маркер для количества, которое не доступно. Таким образом, x == NA – вектор одинаковой длины с x, все значения которого равны NA, поскольку само логическое выражение является неполным и, следовательно, неразрешимым.
Заметим, что существует второй вид «пропущенного» значения, которое произведено числовым вычислением, так называемое значение «Не Число» – NaN. Пример:
> 0/0
или
> Inf – Inf
который оба дают NaN, так как результат не может быть определен заметно.
В итоге, is.na (xx) равно TRUE и для NA и для значения NaN. При дифференцировании их, is.nan (xx) равно TRUE только для NaN.
Отсутствующие значения иногда печатаются как <NA>, когда символьные векторы напечатаны без кавычек.
2.6. Векторы символов
Символьные количества и символьные векторы часто используются в R, например, как метки рисунка. Где необходимо они обозначены последовательностью символов, разграниченных символом двойной кавычки, например, «x-значением», «Новая итерация заканчивается».
Символьные строки вводятся, используя любые двойные (») или одинарные (») кавычки, но напечатаны, используя двойные кавычки (или иногда без кавычек). Они используют escape-последовательности C-стиля, используя \, поскольку символ ESC, таким образом, \\вводится и печатается как \\, и в двойных кавычках, «вводится как \». Другие полезные escape-последовательности: \n – новая строка, \t – табуляция и \b – клавиша Backspace – смотри? Quotes для полного списка.
Символьные векторы могут быть связаны в вектор функцией с (); примеры их использования будут часто появляться.
Функция paste () берет произвольное число параметров и связывает их один за другим в символьные строки. Любые числа, данные среди параметров, принуждены в символьные строки очевидным способом, то есть, таким же образом они были бы таковыми при печати. Параметры по умолчанию разделены в результате одиночным знаком пробела, но это может быть изменено именованным аргументом sep=string, который изменяет их на строку, возможно пустую.
Например:
> labs <– paste (c («X», «Y»), 1:10, sep=«»)
преобразует labs в символьный вектор
c («X1», «Y2», «X3», «Y4», «X5», «Y6», «X7», «Y8», «X9», «Y10»)
Заметим отдельно, что рецикличность коротких списков также имеет здесь место; таким образом, c («X», «Y») повторен 5 раз для соответствия последовательности 1:10.
paste (…, collapse=ss) помещает аргументы в единственную символьную строку, помещая ss между ними, т.е. ss <– "|». Существуют дополнительные инструменты для обработки символов, смотри справку по sub и substring.