Еще один язык?
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