r — вопросы с ответами

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

  • Язык R используется для выполнения статистических операций;
  • Он доступен на веб-сайте R-Project www.r-project.org;
  • R – программа, управляемая из командной строки;
  • Пользователь вводит команды в командной строке (> по умолчанию), и каждая команда выполняется по одной за раз.

Многие материалы были написаны для проекта R людьми во всем мире и свободно доступны на веб-сайте проекта R в виде сетевых пакетов. А базовая установка (для Linux, Windows или Mac) содержит мощный набор инструментов для большинства распространенных целей.

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

Также это диалект языка программирования S.

Особенности R

В первое время после своего выхода ключевой особенностью R было то, что его синтаксис очень похож на S, что облегчает переход пользователей от S-PLUS. Хотя синтаксис R почти идентичен синтаксису S, семантика R (внешне также на него очень похожая) совершенно иная. Фактически, в техническом плане R гораздо ближе к языку Scheme, чем к исходному языку S, когда речь идет о том, что находится у R «под капотом».

Сегодня R работает практически на любой стандартной вычислительной платформе и операционной системе. Его открытая модель распространения означает, что любой может свободно адаптировать программное обеспечение к любой платформе, которую он выберет. Также достоверно известно, что R работает на современных планшетах, телефонах, КПК и игровых приставках.

Одна прекрасная особенность, которая есть у многих популярных проектов с открытым исходным кодом, – это частые выпуски новых версий. Крупный ежегодный релиз обычно происходит в октябре, в него включается новый функционал, а публике открываются все основные изменения и нововведения. В течение года будут выпускаться небольшие исправления ошибок по мере необходимости. Частые патчи и регулярный график крупных релизов указывают на активную разработку программного обеспечения и гарантируют, что ошибки будут своевременно устранены. Конечно, хотя разработчики ядра контролируют дерево исходного кода для R, многие люди по всему миру вносят свой вклад в виде новых функций, исправлений ошибок или и того, и другого.

Другим ключевым преимуществом, которое R имеет перед многими другими статистическими пакетами (даже сегодня), являются его сложные графические возможности. Способность R создавать графику "типографического качества" существует с самого начала и в целом всегда была лучше, чем у конкурирующих платформ. Сегодня, когда доступно гораздо больше пакетов визуализации, эта тенденция все еще продолжается. Базовая графическая система R позволяет очень точно контролировать практически каждый аспект графика. Другие более новые графические системы, такие как lattice и ggplot2, допускают сложную и многослойную визуализацию многомерных данных.

R сохранил оригинальную философию S, которая заключается в том, что он предоставляет язык, который полезен для интерактивной работы, но содержит мощный язык программирования для разработки новых инструментов. Это позволяет пользователю, который берет существующие инструменты и применяет их к данным, медленно, но верно становиться разработчиком, который создает новые инструменты.

Дизайн внутренней системы R

Первичная R-система доступна из Comprehensive R Archive Network, также известной как CRAN. CRAN также содержит множество дополнительных пакетов, которые можно использовать для расширения функциональности R.

Система R разделена на 2 концептуальных части:

  1. "Базовая" система R, которую вы загружаете из CRAN (Linux, Windows, Mac, Исходный код).
  2. Все остальное.

Функциональность R разделена на несколько пакетов:

  1. «Базовая» система R содержит, помимо прочего, базовый пакет, необходимый для запуска R, и содержит наиболее фундаментальные функции.
  2. Другие пакеты, содержащиеся в «базовой» системе, включают утилиты, статистику, наборы данных, графику, grDevices, grid, методы, инструменты, параллель, компилятор, сплайны, tcltk, stats4.
  3. Есть также "рекомендуемые" пакеты: boot, class, cluster, codetools, foreign, KernSmooth, lattice, mgcv, nlme, rpart, survival, MASS, spatial, nnet, Matrix.

Когда вы загружаете свежий установочной файл R из CRAN, вы получаете все вышеперечисленное, что представляет собой значительный объем функциональности. Тем не менее, есть много других доступных пакетов:

  • На CRAN существует более 4000 пакетов, разработанных пользователями и программистами по всему миру;
  • Есть также много пакетов, связанных с проектом Bioconductor;
  • Люди часто делают пакеты доступными на своих личных сайтах; нет надежного способа отслеживать, сколько пакетов доступно таким способом;
  • В репозиториях, таких как GitHub и BitBucket, разрабатывается ряд пакетов, но нет надежного списка всех этих проектов.

Структура

Контрольная структура

R предоставляет контрольные структуры, такие как условные ветви (if-else) и циклы. Синтаксис if-else похож на большинство других языков программирования:

В этом случае «y» будет присвоена строка «положительный», если x> 0, и «отрицательный или ноль» в противном случае. Есть много других способов написать то же самое утверждение в R. Во-первых, мы можем использовать if-else, чтобы вернуть значение.

Мы также можем написать то же выражение, используя функцию ifelse(), где первый аргумент является логическим условием, а второй и третий аргументы являются соответствующими значениями условия, являющимися истинными и ложными.

Расширением функции ifelse() до нескольких значений является функция switch(). R также предоставляет несколько петлевых структур. Самым простым циклом является цикл while, в котором мы указываем логическое условие вместе с сетом шагов, которые выполняются каждый раз, пока условие не будет выполнено. Синтаксис цикла while не отличается от синтаксиса в C. Мы используем цикл while для вычисления суммы квадратов от 1 до 10.

В R нет операторов ++ или + =. Другой полезной циклической конструкцией является повторяющийся цикл, в котором нет логических условий. Цикл продолжается до тех пор, пока не будет выполнено условие разрыва; концептуально повторяющаяся петля похожа на while (T). Мы вычисляем ту же сумму квадратов от 1 до 10, используя цикл повторения.

R также имеет мощный цикл for, который больше похож на цикл for Python или Javascript по сравнению с циклом for в C. В этом цикле мы перебираем вектор элементов. Мы используем оператор in для одновременного доступа к элементу этого вектора. Сейчас мы строим вектор элементов от 1 до 10 как 1:10. Мы вычисляем ту же сумму квадратов от 1 до 10, используя цикл for ниже.

Основные типы данных

Существует два типа данных: скаляры, которые представляют однозначные данные, или составные, которые представляют коллекции скалярных данных.

R предоставляет несколько форматов скалярных типов данных, таких как числовые, целочисленные, символьные, логические и сложные. Числовой тип данных используется для представления чисел с плавающей запятой, а целочисленные данные для представления только целочисленных значений. Мы можем преобразовать переменные из числовых в целочисленные, используя функцию as.integer().

По умолчанию R также использует числовой тип данных для целочисленных значений. Мы идентифицируем тип данных переменной с помощью функции class()

Мы также можем проверить, является ли переменная целым числом, используя функцию is.integer(). Такие функции, как .datatype() и is.datatype() существуют для всех типов данных, упомянутых выше.

Символьный тип данных используется для представления строк. В отличие от C или Java, R не делает различий между типом данных char с одним символом и типом данных строки из нескольких символов. Кроме того, мы можем использовать одинарные и двойные кавычки для заключения строк.

Мы конвертируем символьные и числовые переменные, используя as.character() и функции as.numeric()

Подобно другим языкам программирования, R также имеет стандартные функции обработки строк, такие как вычисление длины строки, поиск подстрок, разбиение строки на основе символа. Библиотека stringr также предоставляет более согласованный и простой в использовании набор функций для обработки строк.

Логический тип данных представляет логические значения: true и false. R использует две константы TRUE и FALSE для представления логических значений. Эти значения также представлены сокращенными константами T и F. R предоставляет стандартные логические операторы и (&), или (|), а не (!) вместе с реляционными операторами, такими как равно (==), меньше (<) и больше (>), которые работают с числовыми переменными и возвращают логические значения.

Функции

R обеспечивает полную поддержку для создания функций. На практике большинство взаимодействий, которые мы имеем с R, происходит через функции: либо предоставляемые базовым пакетом, либо определяемые пользователем функции, содержащие логику приложения.

Синтаксис для вызова функции в R похож на большинство других языков программирования. Например, мы используем функцию sum() для вычисления суммы вектора чисел. Эта функция предоставляется базовым пакетом

R имеет специальный синтаксис для определения функций. Как и в других языках программирования, мы указываем имя функции, параметры вместе с телом операторов, содержащих возвращаемое значение. Разница в том, что мы создаем функцию с помощью ключевого слова function и присваиваем ее переменной.

Мы создаем функцию с именем avg() для вычисления среднего значения вектора чисел. Это реализация функции mean() базового пакета. Мы используем функцию length(), которая вычисляет количество элементов или длину вектора

Нам не нужно явно указывать возвращаемое значение в функции; последнее вычисленное выражение автоматически считается возвращаемым значением. Для однострочных функций нам не нужно заключать тело функции в фигурные скобки.

9 ответов
Преобразование HTML-таблицы в Excel Код ниже извлекает HTML-таблицу в https://rasmusrhl.github.io/stuff и преобразует ее в формат Excel. Проблема в том, что: Числа в скобках преобразуются в отрицательные числа Числа округлены или усечены Решение Спасибо всем за большой вклад. Разнообразные анд...
excel-vba
excel
08 янв. 2018, в 11:53
3 ответа
обзор Я относительно знаком с data.table, не так много с dplyr. Я прочитал некоторые виньетки и примеры dplyr на SO, и пока мои выводы таковы: data.table и dplyr сопоставимы по скорости, за исключением случаев, когда существует много (то есть> 10-100 КБ) групп, и в некоторых других обстоятель...
data.table
dplyr
29 янв. 2014, в 14:03
3 ответа
Я не могу вызвать пакет rJava в R 3.0. Я получил следующее сообщение Error: package ‘rJava’ was built before R 3.0.0: please re-install it Я получаю ошибку, когда пытаюсь переустановить пакет rJava. Я предоставил вывод R CMD javareconf Java interpreter : /usr/bin/java Java version : 1.7.0_21 Ja...
jni
rjava
08 май 2013, в 09:57
7 ответов
По-видимому, люди выяснили, как сделать xkcd графы стиля в Mathematica и в LaTeX. Можем ли мы сделать это в R? Ggplot2-ERS? Geom_xkcd и/или theme_xkcd? Я предполагаю, что в базовой графике, par (xkcd = TRUE)? Как это сделать? [IMG_OUR_ID=294.png] В качестве первого удара (и, что более элегантно пок...
ggplot2
01 окт. 2012, в 14:32
1 ответ
У меня есть R 2.12.1, установленный в моем ubuntu, и я бы хотел обновить до последней версии 2.15, как это можно добиться? Спасибо
07 май 2012, в 03:53
17 ответов
У меня есть фрейм данных, и некоторые столбцы имеют значения NA. Как заменить эти значения NA на нули?
dataframe
na
17 нояб. 2011, в 03:21
2 ответа
Я новичок в Linux и R. Я установил R 2.12 в Ubuntu 11.04. Сегодня я попытался установить новый пакет, поэтому я выполнил следующую команду: install.packages('XML') Но установка завершилась неудачно и предоставила следующую информацию: * installing *source* package ‘XML’ ... checking for gcc... gcc ...
installation
14 окт. 2011, в 09:42
3 ответа
Мне нужно взять data.frame и экспортировать его в файл CSV (или что-то еще, но CSV выглядит как самый простой, хорошо сформированный формат), поэтому я могу импортировать его в базу данных SQLite. Однако, похоже, что write.csv() требует, чтобы я написал строку заголовка, а команда SQLite .import тре...
csv
19 июль 2011, в 18:17
23 ответа
При обсуждении работы с коллегами, обучении, отправке отчета об ошибке или поиске инструкций в списках рассылки, а также в разделе "Переполнение стека" часто повторяется воспроизводимый пример и всегда полезно. Каковы ваши советы по созданию отличного примера? Как вы вставляете структуры данных из...
r-faq
11 май 2011, в 11:26
15 ответов
Я хотел бы удалить строки в этом фрейме данных, которые: a) содержат NA по всем столбцам. Ниже приведен примерный кадр данных. gene hsap mmul mmus rnor cfam 1 ENSG00000208234 0 NA NA NA NA 2 ENSG00000199674 0 2 2 2 2 3 ENSG00000221622 0 NA NA NA NA ...
dataframe
filter
missing-data
r-faq
01 фев. 2011, в 12:47
21 ответ
У меня есть несколько столбцов, которые я хотел бы удалить из фрейма данных. Я знаю, что мы можем удалить их индивидуально, используя что-то вроде: df$x <- NULL Но я надеялся сделать это с меньшим количеством команд. Кроме того, я знаю, что я могу удалить столбцы с использованием целочисленного ...
dataframe
r-faq
05 янв. 2011, в 13:45
9 ответов
Всякий раз, когда я хочу сделать что-то "map" py в R, я обычно пытаюсь использовать функцию в семействе apply. Однако я никогда не понимал различий между ними: как { sapply, lapply и т.д.} применяют эту функцию к входному/сгруппированному входу, как будет выглядеть вывод, или даже то, что вход может...
lapply
sapply
tapply
r-faq
17 авг. 2010, в 19:47
7 ответов
Каковы различия между операторами присваивания = и <- в R? Я знаю, что операторы немного отличаются, как показывает этот пример x <- y <- 5 x = y = 5 x = y <- 5 x <- y = 5 # Error in (x <- y) = 5 : could not find function "<-<-" Но разве это единственное различие?...
assignment-operator
r-faq
16 нояб. 2009, в 10:24
13 ответов
Учитывая два кадра данных: df1 = data.frame(CustomerId = c(1:6), Product = c(rep("Toaster", 3), rep("Radio", 3))) df2 = data.frame(CustomerId = c(2, 4, 6), State = c(rep("Alabama", 2), rep("Ohio", 1))) df1 # CustomerId Product # 1 Toaster # 2 Toaster # 3 Toaster # ...
dataframe
join
merge
r-faq
19 авг. 2009, в 13:43
19 ответов
Я хочу сортировать data.frame по нескольким столбцам. Например, с приведенным ниже номером data.frame, я хотел бы отсортировать по столбцу z (убыв), затем по столбцу b (по возрастанию): dd <- data.frame(b = factor(c("Hi", "Med", "Hi", "Low"), levels = c("Low", "Med", "Hi"), ordered = TRUE)...
dataframe
sorting
r-faq
18 авг. 2009, в 20:42
Наверх
Меню