Статьи

Введение в язык R

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

Еще один язык?

R ориентирован на математику вместо вычислений общего назначения и имеет много общего с Matlab и Octave; например, это доступно для людей, не имеющих компьютерных знаний. Кроме того, это с открытым исходным кодом.

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

R по-прежнему силен в других основных понятиях , в отличие от Matlab: есть возможности для классов и объектов (в частности Clojure), анонимных функций и замыканий и именованных параметров. Он включает в себя целую среду, больше, чем интерпретатор языка: некоторые функции реализуют графические возможности (прощальный gnuplot) и оболочку с завершением и историей.

С практической стороны R заботятся встроенные утилиты для чтения данных из файлов, баз данных (MySQL, ORacle, JDBC, ODBC) и для сохранения результатов (например, всего текущего рабочего пространства или отдельных переменных).

Как и Matlab и Octave, R можно использовать для быстрого создания прототипов; после того, как алгоритм реализован и проверен, он может быть переведен на C или другие языки. Причины перевода заключаются в улучшении производительности и переносимости кода на разные машины, операционные системы или программистов.

Установка

Процесс установки зависит от вашей системы, но четыре дистрибутива Linux поддерживаются через репозитории (с пакетами RPM и Deb).

Люди из других доменов (например, из статистики) устанавливают R каждый день, так что это не похоже на компиляцию ядра или поиск пропавших библиотек. Eveyrthing уже скомпилирован и автоматизирован, что является плюсом по отношению к другим нишевым языкам, которым необходимо загружать различные группы JAR только потому, что предполагается, что программист может справиться с этим.

R основной синтаксис и структуры данных

Прежде чем начать, вы должны знать, что оператор присваивания R равен <-, а не =. = будет работать во многих случаях, но <- более общий, поскольку его можно использовать где угодно; это реальный эквивалент оператора присваивания, который вы использовали в C-подобных языках.

> if (a = 4) 1
Error: unexpected '=' in "if (a ="
> if (a <- 4) 1
[1] 1

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

Числа в R являются числовыми (что означает на самом деле двойной) или целыми числами .

> answer <- 42
> class(42)
[1] "numeric"
> answers <- c(42, 43)
> class(answers)
[1] "numeric"
> answers <- 42:43
> class(answers)
[1] "integer"
> class(as.integer(42))
[1] "integer"

Логические значения представлены с экземплярами ИСТИНА и ЛОЖЬ:

> if (TRUE) 42
[1] 42

Строки также являются первоклассным типом, с более легкой обработкой, чем с библиотеками C:

> message <- "hello"
> message
[1] "hello"

По сути, каждая переменная R является вектором , опять же, аналогично случаю Matlab / Octave; четные скаляры — это просто векторы длины 1. Векторы создаются с помощью функции конкатенации c ():

> my_vector <- c(1, 2, 3)
> my_vector
[1] 1 2 3

Однако списки могут хранить переменные любого типа, а векторы должны быть гомогенными:

> list(42, "a")
[[1]]
[1] 42

[[2]]
[1] "a"

> c(42, "a")
[1] "42" "a"

Более того, как списки, так и векторы могут выступать в качестве карт, поскольку их ключи могут быть строками.

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

Есть много других типов и полезных функций, связанных с интерпретатором. Если вы сталкиваетесь с какими-то неизвестными вызовами, введите? Entity в командной строке, чтобы загрузить соответствующую страницу руководства; Сущность может быть функцией или именем типа.

Быстрый пример: линейная регрессия

R может беспрепятственно выполнять линейную регрессию, что является основной проблемой в статистике и машинном обучении. Операция состоит в нахождении параметров линейной комбинации, которая подходит для нескольких выборок входных и выходных переменных. В нашем случае мы хотим найти параметры q и m в модели correlated_data = q + m * data .
> данные <- с (1, 2, 3, 4)

> data
[1] 1 2 3 4
> mean(data)
[1] 2.5
> var(data)
[1] 1.666667
> sd(data)
[1] 1.290994
> correlated_data <- c(2, 4, 7, 7.5)
> fm<-lm(correlated_data ~ data)
> fm

Call:
lm(formula = correlated_data ~ data)

Coefficients:
(Intercept)         data  
       0.25         1.95  
ttributes(fm)
$names
 [1] "coefficients"  "residuals"     "effects"       "rank"         
 [5] "fitted.values" "assign"        "qr"            "df.residual"  
 [9] "xlevels"       "call"          "terms"         "model"        

$class
[1] "lm"
> fm$coefficients
(Intercept)        data
       0.25        1.95
> fm$coefficients['data']
data
1.95