Pull to refresh
167
0
Alexander Marshalov @Amper

User

Send message
Кстати, несколько замечаний для людей, заинтересовавшихся R (как раз недавно хотел об этом развёрнутую статью написать, но всё времени нет).

Во-первых, для R есть замечательная среда разработки — RStudio. Как и сам R доступна для всех трёх основных платформ, плюс есть серверная версия для работы через бразер. Преимущества — есть редактор файлов с подсветкой синтаксиса, список созданных объектов, графики и документация открываются в отдельной области, ну и в целом поприятней голой консоли.

Во-вторых, R во многом похож на Scheme, только с JavaScript-подобным синтаксисом и без макросов. Зато с такой же системой environment-ов, с такой же нежёсткой типизацией, символами (symbols) и выражениями (expressions) и т.д. Последние 2 фичи, кстати, позволяют решать многие из задач, решаемых в Лиспах за счёт макросов.

В-третьих, сразу стоит понимать, что R — язык с историей, т.е. многие его «странности» объясняются именно историческими причинами. Например, в R есть сразу 2 системы объектно-ориентированного программирования — S3 и S4 (про их отличия был вопрос на StackOverflow). При этом нельзя сказать, что одна система вляется устаревшей — отнюдь, обе используются довольно часто. Историческими же причинами объясняется и отсутствие единой конвенции кода: изначально в R было принято писать всё маленькими буквами и разделять слова точками ("." в R — вполне законный символ в имени, так же, как "_" в Си, например). Но потом пришла S3, в которой точка использовалась при диспетчеризации методов объектов, и имена функций с точками стали не очень очевидными.

В-четвёртых, типизация в R может поначалу сломать мозг. В R у каждого объекта есть как минимум 2 атрибута типа — mode и class (их можно узнать с помощью одноимённых функций — mode() и class()). Грубо говоря, class — это тип самого объекта (например, matrix или table), а mode — это тип примитивов, хранимых в объекте (например, numeric или character). При этом numeric, integer, character и т.д. — это не число, целое и чар, как это принято в других языках, а вектор этих значений. И даже `5` — это не просто число, а вектор из одно элемента. В общем, что касается типов, в R всё очень и очень необычно :)

В-пятых, в R обращение к данным производится посредствам индексации. Например, к пятому элементу (привет, Мила Йовович) вектора `x` можно обратиться как `x[5]`. Но у вектора также может быть атрибут `names`, и тогда к тому же элементу можно обратиться, например, `x[«fifth_element»]`. Кроме оператора `[ ]` есть оператор `[[ ]]` (в основном используется для поиска по спискам — lists) и оператор `$`, который работает только для обращения через имя элемента, но и то не для всех типов. Так что не удивляйтесь, а внимательно читайте документацию и/или туториалы.
Кроме того, обратите внимание, что у любого объекта кроме основного значения может быть любое количество атрибутов. Например, class и mode — это просто атрибуты объекта (которые, кстати, можно перезаписывать). Часто можно встретить и такие атрибуты как dim, names/dimnames и др.

В-шестых, R использует pass-by-promise механизм. Для тех, кто незнаком с ленивыми вычислениями поясню: в функцию передаётся не сам объект, а специальная «обёртка», которая «обещает» вычислить объект, когда он понадобится. Впрочем, данные во внутренних структурах R преобразуются настолько часто, что эффект ленивых вычислений практически незаметен и в целом механизм становится похож на pass-by-value.

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

* векторы (numeric, character) — на них строится всё. Пример создания числового вектора: `c(1, 2, 3, 4)`
* списки (list) — то же самое, но может хранить элементы любого типа
* матрицы и дейта фреймы (matrix и data.frama, соответственно) — для хранения двумерных данных. Матрицы быстрее и «легче», но могут хранить только один тип данных. Дейта фреймы просто удобней — в разных колонках можно хранить разные типы, плюс можно обращаться к колонкам по имени, плюс ещё несколько приятностей. Про сравнение матриц и дейта фреймов можно также почитать на StackOverflow.
* факторы (factor) — для представления категориальных данных. Например, есть у вас данные о нарушениях ПДД с колонкой «цвет сфетофора», которые могут принимать всего три значения — green, yellow и red. Вы можете создать фактор с тремя «уровнями» (не спрашивайте почему такие названия — это что-то из глубоких понятий статистики):

factor(«green», c(«green», «yellow», «red»))
[1] green
Levels: green yellow red

[1] green — [одномерный] строковый вектор green — значение вектора
Levels: green yellow red — уровни фактора

* выражения (expressions) — обычно вводятся с помощью символа тильды (~). Например, если вы видите выражение `z ~ x + log(y)`, это значит, что мы задаём зависимость переменной `z` от `x` и `y` как сумму первого и логарифм от второго. Смотрите примеры, будет понятней.

Топ-10 функций R, которые лучше выучить сразу:

mode
class
print
summary
attributes и attr
apply и sapply
plot
library и install.package
dim
[], [[]], $

Приятного изучения :)
Программа действительно хорошая. Впечатляет также очень большое количество расширений-пакетов.

На русском языке материал есть, хотя его не так много как на английском. Лучшее из русского — www.inp.nsk.su/~baldin/DataAnalysis/index.html Особенно должно быть хорошо для введения в анализ данных с помощью R.
Ну и ещё в голову приходят почти классические уже материалы Шипунова herba.msu.ru/shipunov/software/r/r-ru.htm

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

Пример.

Строительная компания строит дом. Договор на строительство подписан, сумма по нему, скажем 1 млн. рублей.
Для строительства нужен цемент. Причем не весь сразу, а разных количествах на разные этапы строительства.
Скажем, всего цемента надо купить 30 тонн, что в текущих ценах на момент подписания договора составляло 500 тыс., на зарплату строителям уйдет 400 тыс., на прибыть компании — все что осталось.

А теперь представьте, что через месяц после начала строительства цемент подорожал на 30%, а его еще надо 20 тонн. В итоге дебет с кредитом не сходятся, надо идти к заказчику и просить его перезаключить договор строительства на новых условиях. А если заказчик не согласится бабла добавить? Остается только банкротиться и судиться с заказчиком.

Фьючерс позволяет уравновесить обязательства, выраженные в цементе, требованиями, выраженными в деньгах. Для этого надо купить фьючерс на 30 тонн цемента и при каждой поставке цемента на стройку уменьшать объем фьючерсной позиции на величину поставки. Такая операция называется хеджированием.
Актуальная инфографика (июнь 2012):
image
iGoogle жалко, очень полюбил свой виджет с хомяком )
Зря вы так про Ассанжа. Термин — «изнасилование» в Шведском законодательстве и в нашем с вами, достаточно сильно различаются.

«В заявлении указано, что они были введены в заблуждение, потому что быстрая смена партнерши – это обман, а обман – это изнасилование. Кроме того, он не представил им справку из вендиспансера. Это тоже обман и изнасилование.»

«Анна Ардин (одна из „жертв“) читает в университете лекции на тему сексуальных домогательств. Она не только теоретик, но и применяет свои знания на практике. Во время ее лекции один из студентов просматривал свой конспект. Она обратилась с жалобой на сексуальные домогательства, потому что, не обращая на нее должного внимания, студент дискриминировал ее как женщину и использовал прием «подавление женщины своим мужским превосходством». А это уже почти изнасилование и уж точно сексуальное домогательство. Студент попросил прощения. Тогда Ардин подала на него новое заявление о сексуальном домогательстве, потому что он пытался «умалить ее чувства и переживания, утверждая мужское превосходство».»
github.com/geometer/FBReader/tree/qt-mobile-zltree/zlibrary/ui/src/qml
вот, набросал недавно gui для FBReader'а на QtQuick, там же есть и настройки. правда стоит посмотреть на несколько ревизий назад, а то только что буквально переделал принятие настроек с нажатия на кнопку на выход из настроек (правда один фиг призыв на сохранение вызывается из qml кода), что больше соответствует Meego стилю
UFO landed and left these words here
Предлагаю схематично отметить на блоках код, картинки и таблицы, а также границы экрана в данный момент, см. www.artgorbunov.ru/bb/ui/infoscroller
UFO landed and left these words here
Ох не то слово — скрестили смолтолк с паскалем, блин :) Вот бы кто-нибудь замутил язык для Erlang VM на базе питона…
Для интересующихся вот список открытых ДНС, которые также поддерживают anycast.
Тут и сервера от Level3, Cisco и других:
4.2.2.1
4.2.2.2
4.2.2.3
4.2.2.4
4.2.2.5
4.2.2.6
64.102.255.44
64.81.111.2
64.81.127.2
64.81.159.2
64.81.45.2
64.81.79.2
66.92.159.2
66.92.224.2
66.92.64.2
66.93.87.2
128.107.241.185
151.197.0.38
151.197.0.39
151.202.0.84
151.202.0.85
151.203.0.84
151.203.0.85
156.154.70.1
156.154.71.1
199.2.252.10
199.45.32.37
199.45.32.38
199.45.32.40
199.45.32.41
199.45.32.43
204.117.214.10
204.97.212.10
208.67.220.220
208.67.222.222
209.244.0.3
209.244.0.4
216.231.41.2
216.254.95.2
216.27.175.2

Information

Rating
Does not participate
Registered
Activity