Язык R, для программистов

  1. Контур
  2. Вступление
  3. Назначение и подчеркивание
  4. Имя переменной получилось
  5. векторы
  6. Последовательности
  7. Типы
  8. Булевы операторы
  9. Списки
  10. Матрицы
  11. Недостающие значения и NaNs
  12. Комментарии
  13. функции
  14. Объем
  15. Разный

Контур   Вступление   Я написал программное обеспечение профессионально, возможно, на дюжине языков программирования, и самым сложным языком для меня был R

Контур

Вступление

Я написал программное обеспечение профессионально, возможно, на дюжине языков программирования, и самым сложным языком для меня был R. Это на самом деле довольно простой, но нетрадиционный язык. Эти заметки предназначены для облегчения изучения языка для тех, кто привык к более часто используемым языкам, таким как C ++, Java, Perl и т. Д.

R больше, чем язык программирования. Это интерактивная среда для ведения статистики. Я считаю более полезным думать о R как о языке программирования, а не о языке программирования. Язык R является языком сценариев для среды R, так же как VBA является языком сценариев для Microsoft Excel. Некоторые из более необычных особенностей языка R начинают иметь смысл, если смотреть с этой точки зрения.

Назначение и подчеркивание

Оператор присваивания в R равен <- как в

е <- м * с ^ 2.

Также возможно, хотя и необычно, повернуть стрелку и поместить получающую переменную справа, как в

m * c ^ 2 -> e.

Иногда можно использовать = для назначения, хотя я не понимаю, когда это разрешено и запрещено. Большинство людей избегают этой проблемы, всегда используя стрелку.

Однако при предоставлении аргументов функции по умолчанию или при вызове функций с именованными аргументами вы должны использовать оператор = и не можете использовать стрелку.

Когда-то в прошлом R или его предок S использовали подчеркивание в качестве присваивания. Это означало, что соглашение C об использовании подчеркиваний в качестве разделителей в именах переменных из нескольких слов было не только запрещено, но и вызывало странные побочные эффекты. Например, first_name будет не единственной переменной, а инструкцией для назначения значения name переменной сначала! S-PLUS все еще следует за этим использованием подчеркивания. Однако R допускает подчеркивание как переменный символ, а не как оператор присваивания.

Имя переменной получилось

Поскольку подчеркивание не допускается как символ переменной, возникла договоренность использовать точку в качестве разделителя имен. В отличие от использования во многих объектно-ориентированных языках, символ точки в R не имеет особого значения, за исключением двух. Во-первых, функция ls () в R выводит список активных переменных так же, как команда оболочки ls Unix выводит содержимое каталога. Поскольку команда оболочки ls не выводит список файлов, начинающихся с точки, функция ls () в функции R также не показывает переменные, которые по умолчанию начинаются с точки. Во-вторых, ... используется для указания переменного числа аргументов функции.

R использует $ способом, аналогичным тому, как другие языки используют точку.

R имеет несколько однобуквенных зарезервированных слов: c, q, s, t, C, D, F, I и T.

(На самом деле, они не зарезервированы, но лучше думать о них как о зарезервированных. Например, c - встроенная функция для создания векторов, хотя вы также можете создать переменную с именем c. Хуже, T и F не являются синонимами. для ИСТИНА и ЛОЖЬ, но переменные, которые имеют ожидаемые значения по умолчанию. Таким образом, кто-то может включить код T <- ЛОЖЬ; F <- ИСТИНА и изменить их значения!)

векторы

Основным типом данных в R является вектор. Прежде чем описать, как векторы работают в R, полезно выделить две идеи векторов, чтобы установить правильные ожидания.

Первая идея вектора - это то, что я назову контейнерным вектором. Это упорядоченная коллекция чисел без какой-либо другой структуры, например, контейнер vector <> в C ++. Длина вектора - это количество элементов в контейнере. Операции применяются компонентно. Например, если заданы два вектора x и y одинаковой длины, x * y будет вектором, чей n-й компонент является произведением n-х компонентов x и y. Кроме того, log (x) будет вектором, чей n-й компонент является логарифмом n-го компонента x.

Другая идея вектора - математический вектор, элемент векторного пространства. В этом контексте «длина» означает геометрическую длину, определяемую внутренним произведением; количество компонентов называется «размерностью». Как правило, операции не применяются по компонентам. Выражение x * y является единственным числом, внутренним произведением векторов. Выражение log (x) не имеет смысла.

Вектор в R - это контейнерный вектор , сбор данных статистики, а не математический вектор. Язык R разработан вокруг предположения, что вектор представляет собой упорядоченный набор измерений, а не геометрическое положение или физическое состояние. (R поддерживает математические векторные операции, но они второстепенны в дизайне языка.) Это помогает объяснить, например, необъяснимую в противном случае функцию рециркуляции вектора R.

Добавление вектора длины 22 и вектора длины 45 в большинстве языков вызовет исключение; разработчики языка предположили бы, что программист допустил ошибку, и программа теперь находится в неопределенном состоянии. Тем не менее, R позволяет добавлять два вектора независимо от их относительной длины. Элементы более короткого слагаемого используются повторно так часто, как это необходимо для создания вектора длины более длинного слагаемого. Это не попытка добавить физические векторы, которые несовместимы для сложения, а скорее синтаксическое удобство для манипулирования наборами данных. (R выдает предупреждение при добавлении векторов различной длины, и длина более длинного вектора не кратна длине более короткого вектора. Так, например, добавление векторов длиной 3 и 7 вызовет предупреждение, но добавление векторов длиной 3 и 6 не будет.)

В языке R нет скаляров, ничего подобного двойному в языках семейства C. Единственный способ представить единственное число в переменной - это использовать вектор длины один. И хотя можно перебирать векторы, как это можно сделать в цикле for в C, в R обычно более понятно и эффективнее работать с векторами в целом.

Векторы создаются с помощью функции c. Например, p <- c (2,3,5,7) устанавливает p в вектор, содержащий первые четыре простых числа.

Векторы в R индексируются, начиная с 1, а матрицы в сохраняются в главном порядке столбцов. В обоих случаях R напоминает Фортран.

Доступ к элементам вектора можно получить с помощью []. Таким образом, в приведенном выше примере p [3] равно 5.

Векторы автоматически расширяются при назначении индекса после конца вектора, как в Perl.

Отрицательные индексы являются законными, но они имеют совершенно другое значение, чем в некоторых других языках. Если x является массивом в Python или Perl, x [-n] возвращает n-й элемент из конца вектора. В R x [-n] возвращает копию x с удаленным n-м элементом.

Логические значения также могут использоваться в качестве индексов, и они ведут себя не так, как целые числа. Увидеть Пять видов подписок на R ,

Последовательности

Выражение seq (a, b, n) создает закрытый интервал от a до b с шагом n. Например, seq (1, 10, 3) возвращает вектор, содержащий 1, 4, 7 и 10. Это похоже на диапазон (a, b, n) в Python, за исключением того, что Python использует полуоткрытые интервалы и поэтому 10 не будет включен в этот пример. Аргумент размера шага n по умолчанию равен 1 в R и Python.

Обозначение a: b является аббревиатурой для seq (a, b, 1).

Обозначение seq (a, b, length = n) является вариацией, которая установит размер шага в (ba) / (n-1), так что последовательность имеет n точек.

Типы

Тип вектора - это тип элементов, которые он содержит и должен быть одним из следующих: логический, целочисленный, двойной, сложный, символьный или необработанный. Все элементы вектора должны иметь одинаковый базовый тип. Это ограничение не распространяется на списки.

Функции преобразования типов имеют соглашение об именах, так как .xxx для функции преобразует свой аргумент в тип xxx. Например, as.integer (3.2) возвращает целое число 3, а as.character (3.2) возвращает строку «3.2».

Булевы операторы

Вы можете ввести T или TRUE для истинных значений и F или FALSE для ложных значений.

Операторы и и | применять поэлементно на векторах. Операторы && и || часто используются в условных выражениях и используют ленивую оценку, как в C: операторы не будут оценивать свой второй аргумент, если возвращаемое значение определяется первым аргументом.

Списки

Списки похожи на векторы, за исключением того, что элементы не обязательно должны иметь одинаковый тип. Например, первый элемент списка может быть целым числом, а второй элемент - строкой или вектором логических значений.

Списки создаются с помощью функции списка. Элементы могут быть доступны по позиции, используя [[]]. Именованные элементы могут быть доступны по позиции или по имени.

Именованные элементы списков действуют как структуры C, за исключением того, что для доступа к элементам используется знак доллара, а не точка. Например, рассмотрим,

a <- list (name = "Joe", 4, foo = c (3,8,9))

Теперь [[1]] и $ name равны строке «Joe».

Если вы попытаетесь получить доступ к несуществующему элементу списка, скажем, [[4]] выше, вы получите ошибку. Однако вы можете назначить несуществующий элемент списка, тем самым расширяя список. Если индекс, который вы назначаете, находится более чем на один конец конца списка, создаются промежуточные элементы и им присваиваются значения NULL. Вы также можете присвоить несуществующим именованным полям, например, сказать $ baz = TRUE.

Матрицы

В некотором смысле R не поддерживает матрицы, только векторы. Но вы можете изменить размер вектора, по сути, превратив его в матрицу.

Например, m <- array (c (1,2,3,4,5,6), dim = c (2,3)) создает матрицу m. Однако может удивить, что в первой строке m есть элементы 1, 3 и 5. Это потому, что по умолчанию R заполняет матрицы столбцами, как FORTRAN. Чтобы заполнить m строкой, добавьте аргумент by.row = TRUE к вызову функции массива.

Недостающие значения и NaNs

Как и в других языках программирования, результат операции над числами может возвращать NaN, символ «не число». Например, операция может переполнить конечный диапазон номера машины или программа может запросить неопределенную операцию, такие как деление на ноль.

R также имеет другой тип non-number, NA для «не применимо». NA используется для указания отсутствующих данных и, к сожалению, довольно часто встречается в наборах данных. NA в R похож на NULL в SQL или на типы NULL в C #. Тем не менее, нужно быть более внимательным к значениям NA в R, чем к нулям в SQL или C #. Разработчик базы данных или автор фрагмента кода на C # указывает, какие значения можно обнулять, и может избежать проблемы, просто не допуская такие значения. Однако автор функции R не имеет никакого контроля над данными, которые получит его функция, поскольку NA является допустимым значением внутри вектора R. Невозможно указать, что функция принимает только векторы с ненулевыми компонентами. Вы должны обрабатывать значения NA, даже если вы обрабатываете их, возвращая ошибку.

Функция is.nan вернет TRUE для тех компонентов ее аргумента, которые являются NaN. Функция is.na вернет true для тех компонентов, которые являются NA или NaN.

Комментарии

Комментарии начинаются с # и продолжаются до конца строки, как в Python или Perl.

функции

Синтаксис определения функции R аналогичен синтаксису JavaScript. Например:

f <- function (a, b) {return (a + b)}

Функция function возвращает функцию, которая обычно присваивается переменной, в этом случае f, но это необязательно. Вы можете использовать оператор функции для создания анонимной функции (лямбда-выражения).

Обратите внимание, что return - это функция; его аргумент должен быть заключен в скобки, в отличие от C, где скобки являются необязательными. Использование возврата не обязательно; в противном случае значение последней строки, выполняемой в функции, является ее возвращаемым значением.

Значения по умолчанию определяются аналогично C ++. В следующем примере значение b по умолчанию равно 10.

f <- function (a, b = 10) {return (a + b)}

Таким образом, f (5, 1) вернет 6, а f (5) вернет 15. R допускает более сложные значения по умолчанию, чем в C ++. Значение по умолчанию в R не обязательно должно быть статическим типом, но может, например, быть функцией других аргументов.

C ++ требует, чтобы, если аргумент имел значение по умолчанию, то все значения справа. Это не относится к R, хотя это все еще хорошая идея. Определение функции

f <- function (a = 10, b) {return (a + b)}

допустимо, но вызов f (5) вызовет ошибку. Аргумент a будет присвоен 5, но b не будет присвоено значение. Причина, по которой такое определение функции не является недопустимой, заключается в том, что можно по-прежнему вызывать функцию с одним именованным аргументом. Например, f (b = 2) вернет 12.

Аргументы функции передаются по значению. Наиболее распространенным механизмом передачи переменных по ссылке является использование нелокальных переменных. (Не обязательно глобальные переменные, но переменные в области действия вызывающей подпрограммы.) Более безопасная альтернатива - явно передать все необходимые значения и вернуть список в качестве выходных данных.

Объем

R использует лексическую область видимости, в то время как S-PLUS использует статическую область видимости. Разница может быть незначительной, особенно при использовании затворов.

Поскольку переменные не могут быть объявлены - они появляются при первом присваивании - не всегда легко определить область действия переменной. Вы не можете просто определить, глядя на исходный код функции, является ли переменная локальной для этой функции.

Вы не можете просто определить, глядя на исходный код функции, является ли переменная локальной для этой функции

Разный

Вот несколько разных фактов о R, которые могут быть полезны.

  • help (fctn) отображает справку по любой функции fctn, как в Python.
  • Чтобы вызвать сложную арифметику, добавьте 0i к числу. Например, sqrt (-1) возвращает NaN, а sqrt (-1 + 0i) возвращает 0 + 1i.
  • sessionInfo () печатает версию R, ОС, загруженные пакеты и т. д.
  • ls () показывает, какие объекты определены.
  • rm (list = ls ()) очищает все определенные объекты.
  • dev.new () открывает новое окно печати без перезаписи предыдущего.
  • Функция sort () не меняет своего аргумента.
  • Префиксы функций распределения d, p, q, r обозначают плотность (PDF), вероятность (CDF), квантиль (CDF-1) и случайную выборку. Например, dnorm является функцией плотности нормальной случайной величины, а rnorm генерирует выборку из нормальной случайной величины. Соответствующими функциями для равномерной случайной величины являются dunif и runif.

Другие источники

Похожие

Различия между кодом Arduino и Espruino
... ибки», с которыми вы можете столкнуться при переходе от написания кода Arduino к написанию кода Espruino. Это может быть особенно полезно при «портировании» существующего кода. Нет функции delay () Это сделано намеренно, так как добавление задержки не даст Эспруино делать другие вещи. Вместо этого, для больших задержек (> 5 мс) используйте setTimeout для выполнения второго набора кода после периода времени: Итак, следующее: // некоторые команды 1 delay
Как восстановить потерянное имя пользователя и пароль Joomla
У нас было несколько человек, которые недавно связались с нами после потери логина на их сайте Joomla. В этом уроке вы узнаете: Как восстановить потерянное имя пользователя Joomla Как восстановить утерянный пароль Joomla Как восстановить утерянный пароль суперпользователя # 1. Как восстановить потерянное имя пользователя Joomla Вы можете написать себе забытое имя пользователя Joomla. Он будет работать как для суперпользователя,
Instagram оживил его комментарии. Вы увидите больше фото и видео
Последнее обновление приложения Instagram будет довольно сильным в комментариях на этом сайте. С сегодняшнего дня фото и видео можно комментировать, используя ... фото и видео. Таким образом, Instagram хочет немного оживить раздел комментариев под материалами опубликовано пользователями этого сайта. Изменения также сделают всю платформу более интерактивной. И немного
Значения отображения CSS по умолчанию для различных элементов HTML
Каждый элемент в документе HTML принимает значение для свойства отображения CSS. Возможные значения, которые вы можете использовать для отображения много , Три наиболее часто используемых значения: none, block и inline. Но что, если вы не определите отображаемое значение для элемента? Ну, все элементы имеют начальное состояние или состояние по умолчанию для их отображаемого значения. Давайте рассмотрим некоторые из них и увидим некоторые
Как исправить самые большие неприятности iTunes 12
iTunes 12, выпущенный с OS X Yosemite, имеет новый интерфейс, который лучше соответствует
Стандарты YouTube
... или, что YouTube подходит для вашего отдела или организации, вот несколько вещей, о которых стоит подумать, когда вы начнете. Создать стратегию канала Наличие плана поможет вам достичь ваших целей и установить общий тон для вашего канала, чтобы ваши подписчики знали, чего ожидать. Установите некоторые цели. Используйте свои цели, чтобы сформировать контент на своем канале, чтобы обеспечить его полезность и актуальность. Делитесь эксклюзивным
Подарок для механика • 3D движок ~ средняя статуэтка
Впечатляющая гравюра на трехмерной модели двигателя, выполненная в хрустальной статуэтке размером 11х7х7 см. Для более интересного эффекта модель была вырезана в характерном месте, чтобы поршни и все механизмы были лучше видны. Ниже мы оставили место для вас для вашего собственного контента посвящения . Это прекрасная возможность сказать что-нибудь приятное любимому человеку. То, что останется там навсегда. Это могут быть поздравления с окончанием учебы, желание комфортного
Как продавать на Amazon с помощью Shopify
Новый Shopify интеграция с Amazon позволяет как никогда раньше размещать свои продукты на крупнейшем в мире рынке и получать узнаваемость бренда следующего уровня. В то время как ваш интернет-магазин демонстрирует ваш бренд и предлагает максимальный контроль над покупательским опытом, расширение способов продаж через Shopify позволяет вам делать еще больше. Для правильных компаний продажа на Amazon может увеличить продажи, привлекая
Мобильные телефоны в США - правильная SIM-карта
Американская сеть мобильной связи так же запутана, как и в немецкоязычном мире. Не существует сетевого поставщика, который бы охватывал всю территорию Соединенных Штатов в любое время. Здесь вы найдете информацию о расходах, поставщиках, картах предоплаты, телефонных звонках и серфинге, а также о правильной SIM-карте для поездки в США. содержание Сотовые стандарты | Предоплаченные карты | телефоны
Суммирование, агрегирование и группировка данных в Python Pandas
Pandas - библиотека анализа данных Python Я недавно начал использовать отличный Python Панды библиотека как инструмент анализа данных, и, находя переход от R отлично библиотека data.table время от времени я расстраиваюсь, я нахожу свой путь и вижу, что большинство вещей работают довольно хорошо. Один аспект, который я недавно изучал, - это задача группировки

Комментарии

Основной модуль входа в систему на вашем сайте, затем просто нажмите на его "Забыли имя пользователя?
Pandas - библиотека анализа данных Python Я недавно начал использовать отличный Python Панды библиотека как инструмент анализа данных, и, находя переход от R отлично библиотека data.table время от времени я расстраиваюсь, я нахожу свой путь и вижу, что большинство вещей работают довольно хорошо. Один аспект, который я недавно изучал, - это задача группировки
Как мне удалить комментарии из моего профиля / канала?
Как мне удалить комментарии из моего профиля / канала? Настройки YouTube по умолчанию позволяют любому пользователю публично комментировать ваши видео на вкладке "Обсуждение" на вашем канале. Если вы хотите модерировать комментарии, прежде чем они появятся на вашем канале, вы должны отредактировать настройки своего канала с помощью следуя этим шагам , Если вы решите разрешить публичные

Но что, если вы не определите отображаемое значение для элемента?
Как мне удалить комментарии из моего профиля / канала?

Добро пожаловать , Гость !

Мы настоятельно рекомендуем Вам зарегистрироваться, если вы ещё этого не сделали. регистрация откроет Вам новые функции.

Войти или Зарегистрироваться

www.silvio-berluskoni.ru © Все права защищены © 2016.