Read the book: «Историческая хронология с языком R. Часть I Обучение программированию для датировки событий»
Предисловие
Хотя историческую хронологию считают вспомогательной дисциплиной, но история как наука без нее просто немыслима. Тот факт, что Юлий Цезарь был убит в мартовские иды в год, когда он в 5-й раз был римским консулом, нельзя конвертировать в современное летоисчисление, не зная списка римских консулов, римского счета дней месяца и того обстоятельства, что юлианский календарь (ЮК) вступил в силу с 1 января 45 г. до н.э. И только с учетом этих важных моментов можно прийти к выводу, что это событие произошло 15 марта 44 г. по ЮК.
Если заглянуть в еще большую глубь веков, то с датировкой событий возникают еще большие сложности: археологи нашли в Харране (Северная Сирия) памятную стелу, посвященную Адде-Гуппи, матери вавилонского царя Набонида. Судя по надписи, она родилась в 20-м году правления ассирийского царя Ашшурбанипала и считалась влиятельной особой в Вавилоне при царях Набополассаре, Навуходоносоре II, Амель-Мардуке (Авимелехе) и Нериглиссаре. Прожив до глубокой старости, Адда-Гуппи умерла в возрасте примерно 102-х лет на девятом году правления своего сына. [См. Gwendolyn Leick. Historical Dictionary of Mesopotamia Historical Dictionaries of Ancient Civilizations and Historical Eras, No. 9. The Scarecrow Press, Inc. Lanham, Maryland, and Oxford, 2003, p. 3].
Для того, чтобы выяснить, что 20-й год правления царя Ашшурбанипала, когда Адда-Гуппи родилась, соответствует периоду с середины марта-конца апреля 649 по середину марта-концу апреля 648 гг. до н.э., а 9-й год Набонида правления, когда она умерла =2 апреля 547-21 марта 546 гг., историку в своих расчетах нужно учесть несколько важных обстоятельств, влияющих на конверсию ассиро-вавилонского летоисчисления в современную систему счета лет по ЮК.
Во-первых, изучить списки ассирийских и вавилонских царей и конвертировать годы правления одного ассирийского и пяти вавилонских царей, во время которых жила Адда-Гуппи, в счет лет по нашей эре. Во-вторых, в расчетах следует иметь в виду, что по ассиро-вавилонскому счету год восшествия царя-преемника был последним годом его предшественника, а 1-й год правления у нового правителя начинался с вавилонского новогодия. В-третьих, необходимо учитывать тот факт, что счет лет правления велся по лунно-солнечному календарю с новогодием, начинавшимся в период, близкий к весеннему равноденствию, то есть начиная с середины марта и до конца апреля по ЮК; в-четвертых, 1-й месяц вавилонского года, как и остальные месяцы начинались по современному счету (сами вавилоняне начинали сутки с вечера) на следующий день после 1-ой вечерней видимости молодой Луны.
Но даже учтя все эти моменты, нам удалось довольно точно (плюс-минус один день) определить продолжительность только года смерти Адды-Гуппи, но лишь приблизительно – начало и конец года ее рождения. Поскольку благодаря работе ряда исследователей и сохранившимся глиняным манускриптам науке сегодня известна вавилонская хронология (годы правления монархов и их длительность) с 626 г. до н.э. по 75 г. н.э. [См. Parker, Richard Anthony and Waldo H. Dubberstein. Babylonian Chronology 626 BC-AD 75. Providence, RI: Brown University Press, 1971, pp. 1-29]. В то время как датировка более раннего периода ассиро-вавилонской истории носит более приблизительный характер, а потому историки пока не могут более точно определить год рождения Адды-Гуппи.
На графике, созданном с помощью языка R, даны годы жизни матери вавилонского царя Набонида и годы правлений царей, во время которых она жила. На пересечений перпендикуляров, опущенных от оси Х (Годы до н.э.) и оси Y (Цари и годы), приводится возраст Адды-Гуппи (см. рис. 1) на момент смены того или иного долго правившего правителя. (Правда, для относительно кратких правлений эти сведения не даются, т.к. их легко подсчитать, к тому же в этом случае график стал бы нечитаемым из-за обилия текста).

Рис. 1. Годы жизни матери вавилонского царя Набонида и годы правлений царей, во время которых она жила.
Источник: расчеты автора
Думается, что эти два примера применения исторической хронологии достаточно наглядно показывают ту важную роль, которую она играет в датировке событий далекого прошлого. Впрочем, как мы дальше увидим, из-за скудости, противоречивости и немногословности источников, разницы в новогодиях и эр, используемых летописцами и участниками событий, сложные хронологические задачи нередко возникают и в более близкие для нас времена …
Автор этих строк, историк по образованию, большую часть своей жизни проработавший журналистом, но всегда интересовавшейся исторической наукой, последние пять лет посвятил детальному изучению, как отечественной, так и иностранной литературы по исторической хронологии. Работа в банковской журналистике позволила освоить такой мощный инструмент для расчетов, как язык программирования R.
По итогам пятилетней работы получился достаточно объемный труд по исторической хронологии, который автор этих строк решил разделить на несколько частей. Вчерне они уже готовы и буду выходить по мере их готовности к публикации. В этих материалах даются не только сведения по исторической хронологии, но и программные коды, ускоряющие процесс датировки.
Как и следует из названия первой части данной книги: «Обучение программированию для датировки событий», - главный акцент делается в ней на первоначальном обучении языку R для более быстрой и точной датировки исследуемых исторических событий. В то время как 2-я, 3-я, 4-я, 5-я, 6-я, 7-я и 8-я части будут посвящены, соответственно, хронологии древнего Египта, Месопотамии, Греции, Рима и Руси, датировке западных и восточных источников, связанных с древнерусской историей.
Надеюсь, что эта книжная серия будет полезной для всех тех, кто интересуется историей и исторической хронологией, в том числе тем, кому она нужна для учебы и работы. Тем читателям, которые хотят не только ознакомиться с этой книжной серией, но и научится датировать события с помощью программного кода, советую читать части этой серии последовательно, по мере их публикации.
Содержание книги построено примерно таким образом: 1) сначала идет общее изложение интересующей нас темы; 2) потом с целью усвоения изложенного материала приводится программный код и подробно рассматривается пример его использования для датировки события; 3) а затем с целью закрепления пройденного дается задание для самостоятельной работы с ответами в конце книги.
Главная цель этой книги - обучающая, но не только. Автор также надеется, что знакомство читателей с методами современной исторической хронологии поможет и в борьбе с довольно широко укоренившемся в обществе заблуждением.
Начиная с 1980-ых гг. в нашей стране в околонаучных кругах распространяется так называемая «новая хронология», на много веков и даже тысячелетий омолаживающая исторические события, как древней, так и средневековой истории России и других стран. Те , кто интересуется научной, а не «новой хронологией», прочитав нашу книгу, могут убедиться, что достоверность общепринятых дат подтверждается самыми различными методами.
Радиоуглеродный и дендрохронологический методы датировки, датировка по астрономическим явлениям, сведения, получаемые из археологических и письменных источников, - все это свидетельствует о научной достоверности современной хронологии.
И хотя датировка многих событий по-прежнему нуждается в дополнительном уточнении, но это совсем не означает, что древнюю и средневековую хронологию следует начинать с X в. нашей эры.. Надеюсь, что моя книга поможет показать абсолютную несостоятельность мифов, распространяемых сторонниками «новой хронологии». Хотя специально рассматривать эти мифы автор не собирается, а считает достаточным просто изложить научные методы современной исторической хронологии.

С уважением Владимир Брюков, 20 октября 2026 г., г. Иваново
Постскриптум. Если в ходе чтения моей книги у читателей:
1) появятся какие-то вопросы, замечания или предложения по улучшению ее содержания;
3) возникнет желание получить консультацию у автора этих строк;
4) пройти курс индивидуального, либо группового обучения по теме публикации.
Просьба присылать все предложения по следующей эл. почте: bryukov@bk.ru
Поскольку любой достаточно объемный труд редко обходится без досадных ошибок, большая просьба сообщать о них по тому же адресу эл. почты.
Глава 1. Введение
§1. Предмет и задачи исторической хронологии
2500 лет назад один грек написал о работе историка до сих пор актуальные строки: «Геродот из Галикарнасса собрал и записал эти сведения, чтобы прошедшие события с течением времени не пришли в забвение и великие и удивления достойные деяния… не остались в безвестности …» [См. Геродот. История в девяти книгах. Изд-во «Наука», Ленинград, 1972, с 12]
С тех пор минуло 25 веков, но ученые продолжают работать над тем, чтобы «прошедшие события … не пришли в забвение». Впрочем, собрать сведения о том или ином исторического событии недостаточно, нужно еще и верно определить его дату, то есть его точное место в современном летоисчислении.
Но чем глубже исследователь погружается в глубину веков, тем c меньшим числом письменных источников ему приходиться работать, а, следовательно, тем труднее поддаются точной датировке события прошлого. И вот с этой проблемой, проблемой адекватного размещения исторических событий по шкале современного летоисчисления, ему помогает справиться историческая хронология.
Древние греки называли время «хроносом», а науку – «логосом». Поэтому образованный из этих двух слов термин «хронология» в переводе означает «учение о времени», а точнее сказать – «науку об измерении времени». Хронология как отдельная научная дисциплина выделилась из исторической науки в конце XVI в. В зависимости от изучаемого предмета, а также целей и задач, стоящих перед учеными, принято выделять: 1. хронологию астрономическую или математическую; и 2. хронологию историческую или практическую.
Астрономическая хронология рассматривает различные закономерно повторяющиеся небесные явления и с помощью соответствующих вычислений устанавливает их точное время, что обеспечивает датировку связанных с ними исторических событий, выраженную в современных единицах летоисчислении. В то время как задачей исторической хронологии является перевод дат различных календарных систем на современное летоисчисление путем изучения и сравнения различных письменных и археологических источников с привлечением, в том числе и данных астрономической хронологии.
Историческая хронология хотя и считается всего лишь одной из многих вспомогательных исторических дисциплин, но на самом деле – самая важная из них, поскольку без нее вообще невозможен процесс исторического познания. Понимание исторического процесса немыслимо без знания исторической последовательности событий. Основным условием изучения любого источника, письменного или вещественного, является определение его времени и даты». [См. Е. И. Каменцева. Хронология: Учеб, пособие для студентов вузов/Е. И. Каменцева. – 2-е изд., испр. и доп. – М.: Аспект Пресс, 2003., сс. 5-6]
Французский философ и ученый-гуманитарий XVI века Жан Боден (1529/1530-1596) в трактате «Метод легкого познания истории» сравнил хронологию с «нитью Ариадны»: «Те, кто думает, что можно понять историю без хронологии, еще более ошибаются, нежели те, кто надеется выйти из лабиринта без проводника. Последние уходят все дальше и дальше и не могут найти выход из лабиринта, тогда как первые блуждают в запутанных текстах с полной неопределенностью и не понимают, где начать или где повернуть назад. Но законы времени, путеводитель для всех историков, словно вторая Ариадна, указывают своей нитью потайные ступени, не только предостерегая нас от ложных путей, но и часто давая нам возможность вернуть заблуждающихся историков на правильный путь». [См. Жан Боден. Метод легкого постижения истории. М. Наука. 2000, с. 270]
Еще в 1833 г. адъюнкт-профессор Московского университета М. С. Гастев (1801-1883), читавший лекции молодому Михаилу Лермонтову (на этой почве они и поссорились), так определил предмет этой дисциплины: «Хронология научает: 1. познавать меры времени, употребительныя у всех известных народов; 2. объяснять, совершенствовать Историю, приложив оныя к сей науке; 3. правильно делить время», [См. М. С. Гастев. Материалы для вспомогательных наук истории. Кн. 1: для хронологии. Москва : Унив. тип., 1833-1835, с. 8]
Крупный специалист конца XIX в. по истории церкви В. В. Болотов (1854-1900) считал хронологическую науку самым важным помощником историка: «История без хронологии стоять не может, и хронология должна считаться самым видным пособием и по истории вообще, и по истории церковной в частности». [См. В.В. Болотов. Лекции по истории Древней Церкви. СПб. 1907, т 1, с. 66]
Известный американский историк и хронолог российского происхождения Э. Бикерман (1897-1981), говоря о важности датировки исторического события, вполне справедливо заметил: «Факт считается историческим, если он может быть определен не только в пространстве, но и во времени. Факт помещается в четвертое, т. е. временное, измерение путем отсчета его удаленности от настоящего момента. Хронология… позволяет нам установить временной промежуток между историческим фактом и нами, преобразуя хронологические указания источников в единицы нашего летосчисления. Так, если говорится, что «Гораций умер на пятый день до декабрьских календ, когда консулами были Г. Марций Цензорин и Г. Асиний Галл», то с помощью хронологии эта римская дата переводится на нашу систему летосчисления как 27 ноября 8 г. до н. э. и таким образом показывает, насколько далеко отстоит от нас во времени смерть Горация». [ См. Э. Бикерман. Хронология древнего мира: Ближний Восток и античность. М., 1975, с. 5].
Хронология изучает системы исчисления времени в историческом развитии. Конечная цель хронологии состоит в том, чтобы дать историку-исследователю точные сведения о времени исторических событий или помочь определить точные даты исторических источников. Для правильного понимания дат необходимо знакомство с различными системами времяисчисления и умение выражать их в современных единицах счета времени. [См. Е. И. Каменцева. Хронология: Учеб, пособие для студентов вузов/Е. И. Каменцева. – 2-е изд., испр. и доп. – М.: Аспект Пресс, 2003., с. 5].
Разнообразие систем датировок, с которыми сталкивается исследователь при изучении источников различных времен и народов, вызывает необходимость в разработке методов, позволяющих историку работать с этими датировками. Поэтому они должны быть приведены к сопоставимому виду. В связи с этим хронология, как вспомогательная историческая дисциплина, ставит перед собою две задачи: во-первых, задачу по согласованию (конкордации) дат, относящихся к различным системам летоисчисления, в ходе которого выясняется приблизительное соотношение между ними (какая дата старше и примерно насколько лет, какой месяц одного календаря приблизительно соответствует аналогичным месяцам другого календаря и т.д.); и во-вторых, задачу по точному переводу (редукции) дат в современную, либо иную систему летоисчисления.
Конкордация дат состоит в установлении взаимоотношения между различными системами летосчисления (календарями и эрами). Редукция заключается в выработке принципов и методов по переводу дат с одной хронологической системы на другую (с учетом разницы в календарном счете и эре). [См. Л. В. Черепнин. Русская хронология, с. 19].
Таким образом одна из главных задач исторической хронологии – изучение различных систем счета времени, применявшихся народами и странами на разных этапах своего развития. По его итогам разрабатываются и усовершенствуются различные алгоритмы по точному переводу дат, выраженных в иных хронологических шкалах, на современную систему летоисчисления, а также оптимизируются и уточняются различные методы их конкордации, что особенно важно в тех случаях, когда редукция дат, относящихся к недостаточно изученным хронологическим системам, не может быть точной.
§2. История зарубежной хронологической науки
Хронология как отдельная дисциплина появилась в конце XVI в., когда с критикой реформы календаря, проведенной папой Григорием XIII, выступил французский филолог и историк Жозеф Скалигер (1540-1609), кальвинист по своим религиозным убеждениям.
Первым его трудом в этой области стало «Новое сочинение об исправлении счета времени» (“Opus novum de emendatione temporum”), вышедшее в Париже в 1583 г. Еще одна его книга – «Сокровище времен» (“Thesaurus temporum”), впервые издана в 1606 г. в Лейдене. В этих работах описаны различные системы летоисчисления, применявшиеся древними греками, римлянами, вавилонянами, коптами, иудеями, христианами, мусульманами и т.д., а также даны способы перевода дат, то есть их редукции.
Чтобы историкам легче было работать с разными календарными системами и эрами Ж. Скалигер предложил оригинальную хронологическую шкалу, к которой можно редуцировать любую историческую дату — юлианский период. Подробнее об этой системе датировки, в которой основной единицей счета являются дни, а не годы, мы поговорим позднее.
В полемику со взглядами кальвиниста Скалигера вступил французский иезуит Дионисий Петавий (1583-1652), продолживший работу по исследованию различных календарных систем. В 1627 г. он издал «Сочинение о доктрине хронологии» (”Opus de doctrina temporum”), сокращенное изложение которого многократно переиздавалось. В этом труде Д. Петавий предложил дополнить христианскую эру счетом лет до Рождества Христова, то есть методом их обратного отсчета от этого важнейшего для христиан события. Таким образом он ввел в научный оборот летоисчисление до нашей эры.
В XVIII в. материал предшественников был обобщен и дополнен французскими бенедиктинцами из конгрегации св. Мавра: Шарлем Клемансе, Мор Дантином и Урсеном Дюраном, издавшими в 1750 г. книгу «Искусство проверять даты исторических событий» (”L’Art de vérifier les dates”). По сути это был справочник, в котором вначале рассказывалось о различных эрах, пасхальном, лунном, солнечном и прочих циклах, а затем давалась большая хронологическая таблица.
С ее помощью можно было легко узнать, каким был, например, 1000 год от Рождества Христова в пересчете на эру Селевкидов, эру Мучеников, эру Хиджры, эру по олимпиадам и т.д. Кроме того, давался перечень рассчитанных астрономами дат солнечных и лунных затмений с 1 г. по 2000 г. н.э. Эта книга потом неоднократно публиковалась вплоть до 1837 г., став многотомным изданием.
В XIX в. и начале XX в. научная хронология достигла новых успехов. Большой вклад в теорию и историю хронологии внес известный немецкий астроном Христиан Людвиг Иделер (1766-1846), многие годы изучавший различные системы летоисчисления древности. В 1825-26 гг. он издал «Руководство по математической и технической хронологии» (”Handbuch der mathematischen und technischen Chronologie”), в 1831 г. переизданное как «Учебник по хронологии» с дополнительным томом – «Исчисление времени у китайцев», напечатанном в 1839 г.
«Канон затмений» (”Canon der Finsternisse”), изданный в 1887 г. австрийским астрономом Теодором Оппольцером (1841-1886), многие десятилетия использовался учеными для датировки различных исторических событий. «Канон» стал результатом почти двадцатилетнего труда этого выдающегося астронома, вычислившего элементы 8000 солнечных и 5200 лунных затмений за период с 1207 г. до н. э. до 2163 г. н. э.
Другой австрийский астроном Фридрих Карл Гинцель (1850-1926), несколько лет проработавший с Теодором Оппольцером в венской обсерватории, в 1906-1914 гг. опубликовал трехтомное «Руководство по математической и технической хронологии; исчисление времени у народов» (”Handbuch der mathematischen und technischen Chronologie; das Zeitrechnungswesen der Völker ”). Многие разделы этого руководства до сих пор используются современными историками.
Большую помощь историкам оказывают вспомогательные таблицы для сравнения разных календарных систем. Среди них особое место занимают изданные в 1907 г. «Календариографические и хронологические таблицы» (”Kalendariographische und chronologische Tafeln”) австрийского ученого Р. Шрама, который через систему счета времени Ж. Скалигера по юлианским дням связал различные календарные стили.
В XX в. и в начале XXI столетия ученые стали больше уделять внимание углубленному изучению различных систем летоисчисления, а также более доказательной и точной датировке событий древней и средневековой истории. С этой целью систематизируются и анализируются списки египетских фараонов, месопотамских правителей, афинских архонтов, римских консулов и т.д., широко привлекаются астрономические и археологические данные.
Вклад археологии в историческую хронологию стал гораздо более весомым после появления в 1946 г. метода радиоуглеродного датирования, предложенного американским ученым Уиллардом Либби (1908–1980). Первые успехи этого метода, а затем последовавшая его критика способствовали неоднократному пересмотру калибровочных шкал, на основе которых производится датировка.
После принятия в 2020 г. последней версии шкал для Северного (IntCal20) и Южного полушария (SHCal20), а также для морских образцов (Marine20) радиоуглеродный метод можно считать достаточно надежным методом датирования предметов биологического происхождения, предельный возраст, которых не превышает 55 тыс. лет. [См. Reimer P. J. et al. The IntCal20 Northern Hemisphere Radiocarbon Age Calibration Curve // Radiocarbon. — 2020. — Vol. 62, no. 4. — Pp. 725-757; Hogg A. G. et al. SHCal20 Southern Hemisphere Calibration, 0–55,000 Years cal BP // Radiocarbon. — 2020. — Vol. 62, no. 4. — Pp.. 759-778; Heaton T. J. et al. Marine20—The Marine Radiocarbon Age Calibration Curve (0–55,000 cal BP) (англ.) // Radiocarbon. — 2020. — Vol. 62, no. 4. — Pp.. 779-820.]
Сегодня предельная точность радиоуглеродного датирования составляет 15 лет (два стандартных отклонения, доверительная вероятность 95%). Для большинства временных периодов за последние три тысячи лет погрешность измерения, обусловленная погрешностями калибровочной кривой, составит не менее 50 лет, а за последние десять тысяч лет — не менее 100 лет.
Больших успехов в последние десятилетия достигла и дендрохронология, датирующая события, природные явления и археологические находки с помощью исследовании годичных колец древесины. То есть точность датировки по дендрохронологической шкале равна одному году.
Чтобы продлить шкалу датировок за пределы жизни одного дерева, используют перекрестную датировку. Ее суть заключается в хронологическом объединении годичных колец различных поколений деревьев, годы жизни которых перекрываются. Сегодня благодаря усилиям ученых построены следующие абсолютные шкалы: в Западной Европе по дубу, начиная с 5282 г. до н.э., в Центральной Европе по дубу – с 8021 г. до н.э., на Юго-Западе США по сосне – с 6700 г. до н.э.
Среди множества работ, опубликованных зарубежными учеными во второй половине XX в. – начале XXI в. , особо стоит отметить те, которые можно рекомендовать всем желающим углубить свои знания в области исторической хронологии.
В 1968 г. вышла в свет книга Элиаса Бикермана «Хронология древнего мира: Ближний Восток и античность», впервые опубликованная на русском языке в 1975 г. В книге делается акцент на критическом анализе методов датировки, даются практические рекомендации и приводится обширный справочный материал, необходимый для работы историка.
Книга Ричарда Паркера и Уолдо Дабберстайна – «Вавилонская хронология. 626 г. до н.э.-75 г. н.э.» (Parker, Richard Anthony and Waldo H. Dubberstein. Babylonian Chronology 626 BC-AD 75. Providence, RI: Brown University Press, 1971) – представляет собой справочник по вавилонскому летоисчислению и календарю с 626 г. по н.э.-75 г. н.э. В этой книге даются даты первых дней каждого лунного месяца и приводится нумерация лет сначала по годам правления контролировавших Вавилонию монархов, а затем по эре Селевкидов и Аршакидов за весь период. Это позволяет историкам, начиная с конца VII в. до н.э. и до конца I в. н.э., датировать события, связанные с вавилонской историей, с погрешностью не более чем в одни сутки.
Весьма подробный материал по хронологии древнеегипетской истории, начиная с 4 тыс. до н.э. и до эллинистического периода, можно найти в «Хронологии Древнего Египта», изданной в 2006 г. – Ancient Egyptian Chronology. Series: Handbook of Oriental Studies. Section 1 The Near and Middle East, Vol: 83. Editors: Erik Hornung, Rolf Krauss, and David A. Warburton, Leiden-Boston, 2006.
В этом коллективном труде, опубликованном на английском языке голландским издательством BRILL, подробно рассматриваются различные способы датировки, как по спискам фараонов, анналам, так и с помощью радиоуглеродного метода. В конце книги дается пересмотренная хронология Древнего Египта, учитывающая последние открытые наукой факты.
§3.Знакомство с языком и установка последней версии R и RStudio
За последние годы в РФ вышло несколько учебных пособий по исторической хронологии, как впервые опубликованных, так и в новой редакции. Несмотря на то, что они учат одному и тому же предмету, их авторы делают различный акцент на изложении той или иной темы.
Главная задача нашего учебника – не только систематически изложить данную дисциплину, но и помочь студентам освоить язык программирования R, что позволит им быстро выполнять сложные хронологические расчеты. Без этого невозможно облегчить работу историка по переводу дат с одной системы счета времени в другую.
Сегодня уже многие исследователи используют самые различные программные пакеты, как для статистических расчетов, так и для иных прикладных целей, что существенно повышает производительность их труда. Но еще больше возможностей ученому дает знание языка программирования R.
В этом случае в его распоряжении будет на порядок большее количество прикладных пакетов, которых можно использовать для самых разнообразных целей. Так, на конец сентября 2026 г. в Полном сетевом архиве CRAN находилось 25258 доступных для пользователей пакетов. Причем, с каждым днем их количество растет.
Впрочем, автор этих строк рекомендует историкам использовать язык R не только из-за его весьма обширной библиотеки, но и относительно простого синтаксиса, который легче изучить человеку, ранее не занимавшемуся программированием.
Созданный в 1993 году язык R сегодня получил во всем мире очень широкое распространение. Причем, в первую очередь, среди ученых. В том числе потому, что R – эффективный язык, способный выполнять практически все виды математического и графического анализа данных. Еще один большой плюс – у языка R свободный код, то есть он распространяется бесплатно. И это дает ему серьезное конкурентное преимущество перед стоящим больших денег платным программным обеспечением.
Занятие № 1.1. «Учимся устанавливать и запускать среду для работы с R»
Прежде чем начать пользоваться языком R для расчетов нам нужно сначала загрузить его последнюю версию. Все необходимые установочные файлы и нужную информацию можно найти на одном из сайтов CRAN. С этой целью нужно пройтись по ссылке – https://cran.r-project.org/, где пользователи операционных систем Linux, Mac OS X и Windows должны выбрать свои опции: Download R for Linux, Download R for (Mac) OS X и Download R for Windows.
Заметим, что зачастую у пользователей Linux установочный файл с R уже входит в базовый дистрибутив, а потому его не нужно скачивать. Если же его нет, то пользователи, как Linux, так и Mac OS X при установке R должны сначала выбрать уже упомянутые выше опции, соответственно, Download R for Linux или Download R for (Mac) OS X, а затем внимательно следовать подробным инструкциям, которые даются на портале https://cran.r-project.org/.
Пользователи Windows при установке R должны воспользоваться следующими опциями: сначала пройтись по ссылке Download R for Windows, затем щелкнуть по ссылке base и, наконец, по ссылке – Download R-4.6.1 for Windows (88 megabytes, 64 bit), то есть загрузить последнюю версию языка (в тот момент, когда пишутся эти строки, последней версией была R 4.6.1). Даже неопытный пользователь Windows легко справится с инсталляцией R, если он при этом будет использовать уже установленные по умолчанию опции и щелкать опцию Next (Следующий) до завершения этого процесса.
При этом 32-битовую версию R, как правило, рекомендуют устанавливать в том случае, если пользователь работает на 32-битовой операционной системе Windows, а обе версии – на 64-битовой. Хотя 32-битовая версия иногда работает быстрее 64-битовой, но последняя необходима пользователю в том случае, если ему требуется больший объем оперативной памяти. Если у Вас относительно современный компьютер с оперативной памятью 4 Гб или более – смело ставьте 64-битную версию. Если оперативной памяти у Вашего компьютера менее 4 Гб и ее Вы не планируете расширять – ставьте 32-бита.
Язык R имеет встроенную стандартную среду разработки – RGui (Graphic User Interface – графический пользовательский интерфейс), используемую для ввода и редактирования программного кода. Эта среда разработки имеет вид командной строки в окне, называемом консолью. Командная строка работает по принципу «вопрос-ответ».
Помимо встроенной среды разработки RGui для языка R создано еще ряд других, зачастую, более совершенных ее аналогов, одни из которых находятся в свободном доступе, а другие платные. В этой книге мы будем использовать для наших расчетов интегрированную бесплатную среду разработки – RStudio, имеющую более удобный интерфейс, что существенно упрощает работу с R. Облегчает работу пользователя также и наличие в RStudio цветовой подсветки, автоматической подсказки при написании кода и удобной навигации по скрипту. Серьезным плюсом RStudio является также и ее совместимость с основными операционными системами – Windows, Linux, Mac OS X.
RStudio – это среда разработки для R, появившаяся в декабре 2010 года. Она доступна в двух версиях: 1. RStudio Desktop, в которой программа выполняется на локальном компьютере как обычное приложение; и 2. RStudio Server, в которой предоставляется доступ через браузер к RStudio, установленной на удаленном Linux-сервере. Бесплатную версию RStudio можно загрузить по следующей ссылке – https://www.rstudio.com/products/rstudio/download/.
Установив последнюю версию языка R и среды RStudio, можно приступать к работе. Если вы используете Windows, запустите R из стартового меню. Для этого нужно два раза щелкнуть левой кнопкой мышки по иконке RStudio, которая находится в меню «Пуск» в перечне программ, установленных на Вашем компьютере. Для большего удобства иконку RStudio лучше прикрепить к панели задач компьютера, что ускорит начало работы. Если вы используете операционную систему Mac дважды щелкните на значок R в директории приложений. В Linux наберите «R» в командной строке терминала.
После запуска среды RStudio появляется ее рабочее пространство, разделенное на четыре окна (конфигурация может быть иной, но для работы нам нужна именно эта). В схематичном виде это пространство представлено на рис. 1.1:
1. В левом верхнем окне рабочего пространства находится редактор кода (Code), в котором пишется, вводится и сохраняется программный код. В редакторе RStudio есть функция автоматического распознавания и подсветки ошибок.
2. В левом нижнем окне пользователь увидит консоль (Console), выполняющую команды, введенные редактором кода. Именно здесь ведется интерактивная работа с языком R.
3. В правом верхнем окне находится рабочее окружение (Environment) и история команд (History).
4. В правом нижнем окне: во-первых, появляются справки по той или иной команде R, т. е. здесь можно получить помощь (Help); во-вторых, есть доступ к списку загруженных программных пакетов (Packages), графиков (Plots) и файлов (Files); в-третьих, здесь появляется графический результат выполнения команд в консоли.
В ходе работы в RStudio при выполнении ряда команд могут появиться и другие дополнительные окна, например, с графиками, ссылками и т.д.

Рис. 1.1. Схема рабочего пространства RStudio
Источник: выполнено в Paint.NET по скриншоту RStudio
Попробуйте закрепить полученные знания, решив следующее задание, после которого сразу же даются ответы (заранее их лучше не смотреть).
Задание к занятию № 1.1
1. По какой ссылке нужно пройтись, чтобы найти необходимые установочные файлы и нужную информацию по загрузке и установке R? Дайте характеристику RGui и RStudio.
2. Сколько окон появляется при открытии рабочего пространства RStudio? Назовите их.
3. В каком окне появляется редактор кода, какие функции он выполняет?
4. В каком окне появляется консоль, какие функции она выполняет?
5. Назовите, остальные окна, где они находятся и какие функции выполняет?
Ответы к занятию № 1.1:
1. Чтобы найти необходимые установочные файлы и нужную информацию по загрузке и установке языка R надо пройтись по ссылке: https://cran.r-project.org/. Язык R имеет встроенную стандартную среду разработки – RGui, используемую для ввода и редактирования программного кода. RStudio – интегрированная бесплатная среда разработки, имеющая более удобный интерфейс, что существенно упрощает работу с R.
2. При открытии рабочего пространства RStudio появляется четыре окна: 1. редактор кода, 2. консоль, 3. рабочее окружение (Environment) и история команд (History) и 4. окно для справок, получения помощи, доступа к списку загруженных программных пакетов (Packages), графиков (Plots) и файлов (Files), здесь также появляется графический результат выполнения команд в консоли.
3. В левом верхнем окне рабочего пространства находится редактор кода (Code), в котором пишется, вводится и сохраняется программный код.
4. В левом нижнем окне пользователь увидит консоль (Console), выполняющую команды, введенные редактором кода.
5. Еще два окна рабочего пространства RStudio. В правом верхнем окне находится рабочее окружение (Environment) и история команд (History). В правом нижнем окне: во-первых, появляются справки по той или иной команде R, т. е. здесь можно получить помощь (Help); во-вторых, есть доступ к списку загруженных программных пакетов (Packages), графиков (Plots) и файлов (Files); в-третьих, здесь появляется графический результат выполнения команд в консоли.
Занятие № 1.2. «Знакомимся с демоверсиями R»
После того как рабочее пространство RStudio загрузится, слева в нижней части ее окна, то есть в консоли, появится символ с курсором «> |» (см. рис. 1.1). Это означает, что RStudio в данный момент не занята и ожидает ввода новых команд.
Сразу после загрузки в консоли RStudio появится следующий текст: «R -- это свободное ПО… Введите 'demo()' для запуска демонстрационных программ, 'help()' – для получения справки, 'help.start()' -- для доступа к справке через браузер. Введите 'q()', чтобы выйти из R».
Функции в R англоязычные поэтому для лучшего их понимания и запоминания автор советует начинающим программистам переводить их с английского на русский. Правда, не всегда этот перевод можно сделать с помощью словаря общеупотребительной лексики. Тем не менее тому, кто решил всерьез заняться программированием на R, нужно будет освоить язык Шекспира, по крайней мере в той степени, чтобы читать и понимать справочные материалы по этому языку.
Например, в упомянутом выше тексте, который появился в консоли, команда help() по-русски может быть переведена как помощь(), а команда q()=выйти(), т.к. буква q – сокращение от слова quit, имеющего значение «уходить, покидать».
Давайте, попробуем ввести команду help.start(), которую по-русски можно перевести как помощь.старт(), то есть означает помощь для тех, кто только начинает работать с языком.
Прежде чем вводить команду help.start() убедитесь, что в консоли (см. левое нижнее окно на рис. 1.1) RStudio появится символ с курсором > |, означающий, что студия ждет указаний от пользователя.
Вводить команду можно трояким способом:
1. Написать команду help.start() в консоли RStudio, а потом на клавиатуре компьютера нажать на клавиатуре кнопку Enter Ввод ().
2. Написать команду help.start() в редакторе кода, (см. левое верхнее окно на рис. 1.1), подвести к этой команде курсор, а потом нажать на клавиатуре одновременно кнопки Ctrl и Ввод(Enter).
3. Написать команду help.start() в редакторе кода, выделить ее мышкой, потом в самом верху редактора нужно щелкнуть по иконке с надписью Code (Код), а затем левой кнопкой мышки щелкнуть по опции Running Selected Line(s) (Ввести выделенные строки).
В результате в нижнем правом окне RStudio появится гиперссылки на обучающие материалы, помогающие работе с языком R. Среди них я бы посоветовал вам обратить особое внимание на ссылку: An Introduction to R (Введение в язык программирования R). Щелкните эту гиперссылку, а затем внимательно прочитайте появившийся текст. Если вы не знаете английского, то скопируйте текст и с помощью Яндекса.Переводчик или Google.Переводчик переведите.
Теперь давайте таким же образом введем команду demo(), с помощью который можно узнать, например, о возможностях языка R:
demo()
В результате в редакторе кода откроется дополнительное окно с надписью R demos (R демоверсии) с перечнем различных демоверсий. В этом перечне будет четыре заголовка, в самом верху: Demos in package ‘base’ (Демоверсии в пакете ‘base’, т. е. в базовом пакете); ниже следуют: Demos in package ‘graphics’(Демоверсии в пакете ‘graphics’, т.е. в пакете графика); далее: Demos in package ‘grDevices’ (Демоверсии в пакете ‘grDevices’, т.е. в пакете графических устройств) и еще ниже: Demos in package ‘stats’(Демоверсии в пакете ‘stats’, т. е. в пакете статистика).
Заметим, что пакет – это набор функций R, данных и программного кода, предназначенных для решения определенных задач. Папка, в которой хранятся пакеты на вашем компьютере, называется библиотекой.
Для того, чтобы ознакомиться с графическими возможностями языка выберем из этого перечня демоверсий опцию graphics, которая относится к одноименному пакету.
Для этого введем команду demo(graphics), что по-русски означает демонстрация(графика).
В результате в консоли появится следующая надпись: > demo(graphics)
(вводить в редакторе нужно строки кода без значка >):
demo(graphics)
---- ~~~~~~~~
Type <Return> to start (напишите Return (ответ), чтобы начать):
Return
Можно вести в консоли команду Return, затем нажать кнопку Enter (Ввод), а можно самому Return не вводить, просто щелкнуть мышкой в консоли рядом с этой надписью, а затем нажать Enter (Ввод).
Потом будет несколько раз появляться надпись: «Нажмите <Ввод>, чтобы увидеть следующий график:». И каждый раз нужно будет нажимать Enter. А справа в нижней части окна интерфейса RStudio будут появляться различные примеры с графиками. В общей сложности приводится 11 таких графиков.
Чтобы сохранить понравившийся вам график достаточно щелкнуть по нему правой кнопкой мышки. Потом выбрать из появившегося в самом верху списка опций: Save image as... (Сохранить рисунок как…), либо Copy image (Скопировать рисунок).
В первом случае этот рисунок можно под определенным именем сохранить в виде файла в своей рабочей папке. А во втором случае – вставить, например, в документ Word, с которым мы работаем, либо в программу paint.net, где этот рисунок можно отредактировать, и т. д.
Но поскольку нас интересует историческая хронология, то автор этих строк предлагает читателям познакомиться с графиком «Дни недели и Луны в августе 79 г.», который позволит нам узнать, в какой день недели и день лунного месяца погибли римские Помпеи. Согласно общепринятой датировке это случилось 24 августа 79 г. С учетом того, что 1 августа 79 г. было воскресеньем (7-ым днем недели) и 16-ым днем Луны (при счете от конъюнкции, то есть невидимой фазы новолуния=17 июля ) автор этих строк построил два графика: лунного цикла (точек в виде Луны), изменяющегося в пределах от 1 до 30 дней, и недельного цикла, изменяющегося в пределах от 1 до 7 дней (от понедельника до воскресенья).
Проведем к этим двум графикам перпендикуляр от точки «24 августа 79 г.», расположенной на оси Х (День месяца), который пересечет график цикла Луны в точке=10, а график недельного цикла в точке =2. (Считаем число точек снизу вверх – от 0 и до их пересечения). Для наглядности в эти точки пересечения проведены также и перпендикуляры от оси Y - см. рис. 1.2.
Следовательно, римские Помпеи погибли в 10-й день нового лунного месяца (начался в день конъюнкции 15 августа) и во 2-й день недели, то есть во вторник. Таки образом один и тот же день в данном случае у нас имеет три порядковой нумерации: 1) по его позиции в августе месяце по ЮК; 2) по его месту в лунном цикле; 3) и в недельном цикле. Благодаря таким характеристикам временного ряда исследователям удается решать многие хронологические загадки прошлого.

Рис. 1.2. Недельный и лунный цикл в день гибели римских Помпей
Источник: выполнено в RStudio по расчетам автора
Чтобы закрепить только что полученную информацию, давайте выполним практическое задание, к которому сразу же после него даются ответы (до решения задания их лучше не смотреть).
Задание к занятию № 1.2
1. Можно ли вводить в редакторе строки кода со значком >? Какую команду нужно ввести в редакторе кода, чтобы познакомиться со списком демоверсий языка R. Где появляется этот список? Введите эту команду, а затем ответьте, сколько пакетов и демоверсий в этом списке, а также сколько демоверсий в каждом пакете?
2. Какую команду нужно ввести в редакторе кода, которая позволит вам познакомиться с демоверсией image. Из какого пакета эта демоверсия? Какие ею демонстрируются объекты?
3. Какую команду нужно ввести в редакторе кода, чтобы познакомиться с демоверсией Japanese. Из какого пакета эта демоверсия? Какие ею демонстрируются объекты?
4. Какую команду нужно ввести в редакторе кода, чтобы познакомиться с демоверсией hclColors. Из какого пакета эта демоверсия? Какие ею демонстрируются объекты?
5. Какую команду нужно ввести в редакторе кода, чтобы познакомиться с демоверсией persp. Из какого пакета эта демоверсия? Какие ею демонстрируются объекты?
6. Найдите на рис. 1.2. на оси Х (Дни месяца по ЮК) точки, обозначающие: 5, 10, 15, 20 и 31 августа 79 г. Проведите от каждой из них воображаемый перпендикуляр к графикам лунного и недельного циклов и ответьте на вопрос: какой день лунного месяца и недели соответствует каждому из перечисленных дней августа 79 г. (чтобы ответить, посчитайте число точек на графиках лунного и недельного цикла)?
7. В предыдущем задании отсчет дней лунного цикла ведется от дня астрономического новолуния (конъюнкции), когда Луна еще невидима. Такой счет возможен, если применяется арифметический лунный календарь, в которых начало месяца определяется путем счета, а не наблюдения за появлением новой Луны. Судя по дошедшим из Помпей граффити, такого рода счет применялся и жителями этого города [См. Graffito CIL IV 4182//An Introduction to Wall Inscriptions From Pompeii and Herculaneum by Rex E. Wallace, 2005, p.67 ]. Но в древности начало нового месяца часто определялось по неомении, то есть 1-й вечерней видимости молодого месяца. Если предположить, что из-за погодных условий неомения наблюдалась 17 августа 79 г., ответьте на вопрос: какой день лунного месяца соответствует 15, 20, 24 и 30 августа 79 г.
Ответы к занятию № 1.2:
1. Нет, так как это приведет к ошибке, а значок > появиться в консоли после ввода в редакторе кода. Список с демоверсиями появляется в дополнительном окне, которое открывается в редакторе кода. Пакеты: base – 4 демоверсии; graphics – 6 демоверсий; grDevices – 2 демоверсии; stats – 4 демоверсии.
2. Команда demo(image). Демоверсия image из пакета graphics. Демоверсия показывает топографические карты вулкана Маунгафау (Окленд, Новая Зеландия), насыщенность цветовой окраски которых зависит от изображаемой высоты.
3. Команда demo(Japanese). Демоверсия Japanese из пакета graphics. Демоверсия показывает таблицы с тремя основными системами японского письма: хираганы, катаканы и кандзи.
4. Команда demo(hclColors). Демоверсия hclColors из пакета grDevices. Демоверсия показывает трехмерные цветовые модели типа HCL (Hue - Chroma - Luminance).
5. Команда demo(persp). Демоверсия persp из пакета graphics. Демоверсия показывает: во-первых, различные этапы построения цветного трехмерного графика на основе математической формулы; во-вторых, различные этапы построения цветной трехмерной карты вулкана Маунгафау, расположенного в Окленде (Новая Зеландия).
6. Подсчеты по графику на рис. 1.2., дают следующие результаты: 5, 10, 15, 20 и 31 августа 79 г. соответствуют 20, 25, 1, 6, 11 и 17 дни лунного цикла и 4, 2, 7, 5, 3 и 2 дни недельного цикла.
7. Если предположить, что из-за погодных условий неомения наблюдалась 17 августа 79 г., то 15, 20, 24 и 30 августа 79 г. были, соответственно, 28-м днем прошлого лунного месяца, а остальные – 4-м, 8-м и 14-м днями нового лунного месяца.
Занятие. 1.3. «Как писать код, начинать и завершать работу с языком R»
Как уже отмечалось, в языке R все функции англоязычные. Но создавать имена для различных объектов (переменных) можно не только на латинице, но и на кириллице. Язык различает регистр, то есть одни и те же имена, начинающееся со строчной или прописной буквы, для него не одинаковы. В этой книге для более понятного изложения кода автор решил давать названия переменным на кириллице (хотя и не всегда).
Все пояснения к программному коду будут даваться по ходу изложения, предваряя их символом #, который не является частью распознаваемого компьютером кода. После этого знака также будет даваться перевод и объяснение специфики некоторых относительно сложных новых функций.
Каждый объект в R относится к тому или иному типу данных, использование которых для программирования имеет свою специфику. R работает с самыми разными структурами данных, включая векторы, матрицы, массивы данных, таблицы и списки, которые различаются типами данных, способом создания, сложностью устройства, а также способом обозначать и извлекать из них отдельные элементы.
Векторы – это одномерные массивы данных, которые по своему типу могут быть числовыми (numeric), текстовыми (character), логическими (logical) и комплексными (complex). Элементы в рамках одного вектора могут быть только одного типа, то есть только числовыми, только текстовыми, только логическими (последние содержат значения TRUE или FALSE, т.е. ИСТИНА или ЛОЖЬ) или только комплексными (содержат мнимое число), но различные векторы могут иметь данные различных типов.
С целью первого знакомства с языком R давайте поработаем с текстовыми векторами. Предположим мы хотим построить предложение из двух словосочетаний: «Геродот из Галикарнаса» и «отец истории», взяв их в качестве векторов, состоящих из единичного текстового элемента.
С этой целью в редакторе кода будем действовать таким образом: во-первых, присвоим имя каждому словосочетанию, а во-вторых, объединим оба словосочетания с помощью функции, используемой в языке R. Если разные команды пишутся на одной строке, то в этом случае их надо разделять точкой с запятой.
А<-'Геродот из Галикарнаса'; Б<-"отец истории"
Здесь кириллические буквы А и Б обозначают имена введенных словосочетаний, а оператор <- знак их присвоения. То есть имена этим словосочетаниям можно было бы присвоить и по-другому: А =‘Геродот из Галикарнаса’ и Б="отец истории". Иногда в R так и делается, но мы будем использовать для этих целей общепринятый символ <-.
Так как оба значения переменных представляют собой текст, то оба словосочетания нужно обязательно отделить кавычками. Текстовые данные в R всегда отделяются двойными, либо одинарными английскими кавычками. При этом кавычки нельзя смешивать, то есть нельзя ставить в начале одного и того же текста одинарные кавычки, а в конце его – двойные.
Теперь давайте введем словосочетание 'Геродот из Галикарнаса' в редакторе кода (все, что водится обозначим курсивом):
А<-'Геродот из Галикарнаса'
#введем переменную А, чтобы узнать ее значение
А
#после чего консоль выдаст следующий текст:
# [1] "Геродот из Галикарнаса"
#Далее введем в редакторе кода словосочетание "отец истории":
Б<-"отец истории"
#Теперь введем переменную Б, чтобы узнать ее значение:
Б
#в результате чего консоль выдаст следующий текст:
# [1] "отец истории"
Затем попробуем объединить текстовые векторы А и Б в один вектор АБ. Сделать это лучше с помощью функции paste(), которая в переводе имеет два значения: вставить() или склеить().
Справку по этой и другим функциям можно получить, если ввести команду help(paste), или ?paste. После этого в правом нижнем окне рабочего пространства появится справка по функции на английском языке.
Чтобы объединить строки А и Б нужно их в качестве аргументов вставить в функцию paste(А, Б), отделив друг от друга запятой:
АБ<-paste(А,Б)
АБ
# [1] "Геродот из Галикарнаса отец истории"
В результате у нас получился текстовый вектор АБ: "Геродот из Галикарнаса отец истории", но чтобы ему стать грамматически полноценным предложением не хватает тире. У функции paste(А, Б) есть вспомогательный (опционный) аргумент, который по умолчанию оставляет между объединяемыми векторами пробел sep= “ ”. Если в команде paste(А,Б) не указать этот аргумент, то в этом случае по умолчанию между объединяемыми векторами получается пробел.
Если вспомогательный аргумент установить как: sep= “ – ”, то тогда между объединяемыми векторами появится тире:
АБ<-paste(А,Б, sep=" – ")
# по-русски это будет: АБ<-вставить(А,Б, разделитель= " – ")
АБ
# [1] "Геродот из Галикарнаса – отец истории"
Попробуем теперь узнать: во-первых, является ли АБ вектором; во-вторых, является ли вектор АБ текстовым; в-третьих, сколько в векторе АБ элементов; и, в-четвертых, сколько знаков с пробелами? Первое можно сделать с помощью функции is.vector(АБ); второе – функции is.character(АБ); третье – функции length(); а четвертое – функции nchar(). В целях лучшего запоминания, первую функцию можно перевести, как вектор.ли(АБ); вторую – как текст.ли(АБ); третью – длина(АБ), а четвертую – число.знаков().
Сначала давайте узнаем, является ли АБ вектором:
is.vector(АБ)
# [1] TRUE
#Ответ программы: TRUE, т. е. ИСТИНА, да АБ является вектором
#Теперь, посмотрим, является ли АБ текстом:
is.character(АБ)
# [1] TRUE
#ответ: TRUE, т. е. ИСТИНА, да АБ является текстом
#Посчитаем, сколько элементов в АБ, т.е. какова длина этого вектора:
length(АБ)
# [1] 1
# ответ: [1] 1 означает, что вектор состоит из 1-го элемента
#И снова посчитаем, но теперь, сколько знаков с пробелами в этом векторе:
nchar(АБ)
# ответ: вектор состоит из 37 букв и пробелов
# [1] 37
# Чтобы узнать, есть ли в векторе АБ 1, 2, 3-ий и т.д. элементы, нужно рядом с
# символом этого вектора в квадратных скобках поставить 1, 2, 3 и т.д.:
АБ[1]
# узнаем, значение 1-го элемента вектора АБ
# [1] "Геродот из Галикарнаса - отец истории"
# 1-ым элементом является введенное нами предложение целиком
# узнаем значение 2-го элемента вектора АБ
АБ[2]
# [1] NA
# узнаем, значение 3-го элемента вектора АБ
АБ[3]
# [1] NA
Таким образом 2-го и 3-го элемента у вектора АБ нет, т.к. в обоих случаях мы получили ответ NA, то есть Not Available, означающий, что этот элемент не доступен.
Класс или тип объекта в R можно определить, если ввести команду class(). Например, тип данных вектора АБ можно узнать, если вписать его имя в скобках этой команды:
class(АБ)
# [1] "character"
В данном случае был получен ответ, что это вектор текстовой. Если вектор был бы числовой, то ответ был бы – [1] "numeric", если логический – [1] "logical", а если комплексный – [1] "complex ". Подробнее о векторах с числовыми, текстовыми, логическими данными и данными с комплексными числами можно узнать, введя команды: help("numeric"), help("character"), help("logical") и help("complex"). Эту команду легко запомнить, так как слово help в переводе на русский означает помощь. После ввода этих команд справа внизу среды RStudio появится информация на английском языке, кратко объясняющая специфику работы с данным типом векторов.
Теперь, чтобы закрепить полученные знания, вам нужно выполнить следующее практическое задание.
Задание к занятию № 1.3
1. Составьте и введите в редакторе кода предложение из двух словосочетаний: «Жозеф Скалигер» и «основоположник исторической хронологии», соединив его тире. Какие кавычки в R используются при работе с текстовыми векторами? Какой функцией вы воспользовались, чтобы объединить эти словосочетания? С помощью какой функции можно узнать, является ли созданное вами предложение вектором? Воспользуйтесь этой функцией.
2. Составьте и введите в редакторе кода предложение из двух словосочетаний: «Автор «Канона русских затмений»», «астроном …», соединив их с помощью тире. Вместо многоточия поставьте инициалы и фамилию этого автора. Какой функцией вы воспользовались, чтобы объединить эти словосочетания? С помощью какой функции можно узнать, является ли объединенное предложение текстом. Воспользуйтесь этой функцией.
3. Составьте и введите в редакторе кода предложение из двух словосочетаний: «Сторонники… стиля», и «Н. В. Степанов и Н. Г. Бережков.», соединив их двоеточием. Вместо многоточия укажите название календарного стиля. Какой функцией вы воспользовались, чтобы объединить эти словосочетания? С помощью какой функции можно узнать, сколько элементов содержится в созданном нами предложении. Воспользуйтесь этой функцией. Найдите все элементы созданного нами вектора.
4. Составьте и введите в редакторе кода предложение из двух словосочетаний: «1 марта 5508 г. до н.э. и 1 марта 5509 г. до н.э.», «эра, соответственно, для… и … стилей», соединив их тире. Вместо многоточия напишите название соответствующих стилей. Какой функцией вы воспользовались, чтобы объединить эти словосочетания? С помощью какой функции можно узнать, сколько букв с пробелами содержится в созданном нами предложении. Воспользуйтесь этой функцией.
5. Составьте и введите в редакторе кода предложение из трех словосочетаний: «Радиоуглеродный метод», «метод датирования предметов биологического происхождения не старше … тыс. лет», и «Его предложил американский ученый… .», соединив их в первом случае с помощью тире, а во втором случае – точкой (подумайте, как это лучше сделать). Вместо многоточия в первом случае поставьте цифру, а во втором – имя и фамилию ученого. Какой функцией и сколько раз вы воспользовались, чтобы объединить эти три словосочетания в одно предложение? С помощью каких функций можно узнать: является ли созданное нами предложение вектором, текстом, сколько в нем элементов и букв с пробелами? Воспользуйтесь этими четырьмя функциями.
Ответы к занятию № 1.3
1. При работе с текстовыми векторами следует использовать английские одиночные и двойные кавычки.
А<-'Жозеф Скалигер'
Б<-'основоположник исторической хронологии'
#с помощью функции paste() объединяем оба словосочетания
#опция sep=" – " в этой функции означет тире между словосочетаниями
АБ<-paste(А,Б, sep=" – ")
АБ
#[1] "Жозеф Скалигер – основоположник исторической хронологии"
is.vector(АБ)
#узнаем, является ли это предложение вектором
# [1] TRUE
#получаем ответ TRUE, то есть ИСТИНА или да
2. Ответ:
А<-'Автор «Канона русских затмений»'
Б<-'астроном М.А. Вильев'
АБ<-paste(А,Б, sep=" – ")
АБ
# [1] "Автор «Канона русских затмений» – астроном М.А. Вильев"
is.character(АБ)
#узнаем, является ли АБ текстом
# [1] TRUE
#получаем ответ TRUE, то есть ИСТИНА или да
3. Ответ:
А<-'Сторонники ультрамартовского стиля'
Б<- 'Н. В. Степанов и Н. Г. Бережков'
АБ<-paste(А,Б, sep=": ")
АБ
# [1] "Сторонники ультрамартовского стиля: Н. В. Степанов и Н. Г. Бережков"
#узнаем длину вектора АБ
length(АБ)
# [1] 1
#т.к. вектор АБ создан с помощью функции paste(), то у нас # получился единичный вектор
АБ[1]
# [1] "Сторонники ультрамартовского стиля: Н. В. Степанов и Н. Г. Бережков."
АБ[2]
# [1] NA
4. Ответ:
А<-'1 марта 5508 г. до н.э. и 1 марта 5509 г. до н.э.'
Б<-'эра, соответственно, для мартовского и ультрамартовского стилей'
АБ<-paste(А,Б, sep=" – ")
АБ
# [1] "1 марта 5508 г. до н.э. и 1 марта 5509 г. до н.э. – эра, соответственно, для мартовского и ультрамартовского стилей"
#узнаем число букв с пробелами в векторе АБ
nchar(АБ)
# [1] 115
#получаем ответ - 115 букв с пробелами
5. Ответ:
А<-'Радиоуглеродный метод'
А
# [1] "Радиоуглеродный метод"
Б<-"метод датирования предметов биологического происхождения не старше 55 тыс. лет"
Б
# [1] "метод датирования предметов биологического происхождения не старше 55 тыс. лет"
В<-'Его предложил американский ученый Уиллард Либби.'
В
# [1] "Его предложил американский ученый Уиллард Либби."
#с помощью функции paste() объединяем оба словосочетания
АБ<-paste(А,Б, sep=" – ")
АБ
# [1] "Радиоуглеродный метод – метод датирования предметов биологического происхождения не старше 55 тыс. лет"
АБВ<-paste(АБ, В, sep=". ")
АБВ
# [1] "Радиоуглеродный метод – метод датирования предметов биологического происхождения не старше 55 тыс. лет. Его предложил американский ученый Уиллард Либби."
#узнаем, является ли АБВ вектором
is.vector(АБВ)
# [1] TRUE
#узнаем, является ли АБВ текстом
is.character(АБВ)
# [1] TRUE
#узнаем длину АБВ вектора
length(АБВ)
# [1] 1
#узнаем число букв с пробелами в векторе АБ
nchar(АБВ)
# [1] 152
АБВ[1]
# [1] "Радиоуглеродный метод – метод датирования предметов биологического
#происхождения не старше 55 тыс. лет. Его предложил американский ученый Уиллард
# Либби."
# т.к. вектор единичный, то при АБВ[1] получаем положительный ответ,
# а при АБВ[2] = NA, т.е. объект отсутствует
АБВ[2]
# [1] NA
Занятие № 1.4. «Как начинать и завершать сессию с языком R»
Это занятие посвящено тому, как правильно начинать сессию с языком R, а также сохранять и пользоваться результатами, полученными по итогам этой работы. Если в начале работы нужно открыть новый файл, то для этого в самом вверху рабочего пространства RStudio нужно щелкнуть левой кнопкой мышки по иконке File, а затем выбрать в списке опции New File и R Script, либо одновременно нажать на клавиатуре символы Ctrl +Shift+N.
Далее нами приводятся как абзацы с текстом кода, так и с обычным текстом. Обычный текст, если в начале его строки не стоит знак решетки # вводить в редактор кода нельзя, т.к. в этом случае команда в R не будет выполняться. Вводить можно либо сам код, либо обычный текст, в начале каждого строки которого стоит знак решетки # (при необходимости вы его можете сами поставить).
Начиная работу прежде всего стоит обратить внимание на следующие моменты:
Во-первых, любую сессию в R желательно начинать, удалив все объекты от прошлых сессий. Делается это для того, чтобы сохранившиеся от прошлой сессии объекты не влияли непредсказуемым образом на результаты текущей сессии. Объекты от прошлых сессий удаляются таким образом:
#Удаляем переменные, оставшиеся от прошлых сессий
rm(list = ls(all.names = T))
#Проверяем отсутствие переменных
ls()
В этой команде rm() – сокращение от англ. слова remove, т.е. удалить. В скобках rm() стоит функция ls(), то есть в переводе означает список() с вектором имен удаляемых объектов. В скобках функции ls() стоит выражение all.names = T, что означает удаление всех переменных, оставшихся от прежней сессии в RStudio. Далее введя команду ls() получаем ответ character(0), который означает, что все имена объектов из оперативной памяти удалены.
Во-вторых, в начале сессии нужно проверить имя рабочей директории (папки) с помощью команды getwd(), что по-русски: означает получить.имя.папки():
getwd()
# [1] "C:/Users/Vladimir/Documents"
Как видим, в ответе содержится название рабочей директории по умолчанию. Очевидно, что у каждого пользователя будет свое название рабочей папки.
В-третьих, если мы хотим изменить рабочую директорию, то вводим команду setwd(), которая можно перевести как =установить.папку(). Обратите внимание на то, что при указании новой рабочей директории вместо обратной косой черты \ в R нужно поставить: либо две обратных черты \\, либо одну черту с наклоном вправо /.
Таким образом эту команду в R надо вводить либо как setwd('C: \\Users …’), либо как setwd('C: /Users …’). При этом название директории обязательно дается в английских двойных или одиночных кавычках. С учетом вышесказанного установим новую рабочую директорию таким образом:
setwd('D:/Vladimir/Documents/YandexDisk/ANALITIKA/ИсторияR/Расчеты')
# Теперь проверим, удалось ли нам поменять название директории:
getwd()
#[1] "D:/Vladimir/Documents/YandexDisk/ANALITIKA/ИсторияR/Расчеты"
Как видим, мы сумели успешно поменять рабочую директорию. Хочу обратить внимание наших читателей, что каждый пользователь должен ввести название СВОЕЙ рабочей директории (а НЕ УКАЗАННОЙ ВЫШЕ), то есть той, в которой он собираются провести сессию с языком R.
Для этого пользователю нужно открыть свою рабочую папку, подвести мышку к ее названию вверху открывшегося окна (см. стрелку на рис. 1.3) и щелкнуть правой кнопкой. В результате появится список опций, из которого нужно выбрать вариант: «Копировать адрес как текст». После чего скопированный адрес нужно вставить в рабочий файл R, а точнее сказать поместить внутри скобок функции setwd('C: /Users …’). Причем, этот адрес нужно закавычить и заменить в нем обратную косую черту \ на одну черту с наклоном вправо /, либо сделать их двойными. То есть скопируем мы D:\Vladimir\Documents\YandexDisk\ANALITIKA\ИсторияR\Расчеты, но затем этот текст изменим на D:\\Vladimir\\Documents\\YandexDisk\\ANALITIKA\\ИсторияR\\Расчеты или на D: /Vladimir/Documents/YandexDisk/ANALITIKA/ИсторияR

Рис. 1.3 Верхнее окно рабочей папки: стрелка показывает куда нужно щелкнуть, чтобы скопировать имя рабочей директории
Источник: выполнена в Paint.NET на основе скриншота RStudio
В рабочей директории по умолчанию сохраняются и полученные в ходе работы в RStudio результаты. В случае импорта файла не из рабочей директории к нему нужно написать полный путь. Не забывайте в этом случае заключать в кавычки названия файлов и директорий.
Скачав последнюю версию R, пользователь получает в свое распоряжение базовый набор пакетов (base, datasets, utils, grDevices, graphics и methods). Если их недостаточно, то другие пакеты нужно скачивать, а затем устанавливать. После установки они при необходимости загружаются во время сессии. Команда search() выводит на экран названия загруженных и готовых к использованию пакетов.
Если на диске вашего компьютера нет какого-то нужного для данной сессии пакета, то его надо сначала скачать с сайта CRAN. Например, для того, чтобы скачать пакет swephR – High Precision Swiss Ephemeris (Высокоточные швейцарские эфемериды =таблицы видимых положений астрономических объектов), который нами будет часто применяться в дальнейшей работе, нужно воспользоваться следующей команды:
install.packages(‘swephR’)
Если бы R понимал по-русски, то эту команду можно было бы ввести так: установить.пакеты(‘swephR’). Не забывайте при этом название скачиваемого пакета обязательно заключать в кавычки. Пакет нужно устанавливать только один раз. Но пакеты часто обновляются их разработчиками. Используйте команду update.packages() для обновления всех установленных пакетов.
Когда вы устанавливаете пакет, он скачивается с сайта CRAN и загружается на диск компьютера в вашу библиотеку. Для использования этого пакета в текущей сессии программы его нужно загрузить при помощи команды library(). Например, для того чтобы использовать пакет swephR, необходимо ввести команду library(swephR). Если бы R понимал по-русски, то эту команду можно было бы ввести так: библиотека(swephR). При этом ставить название пакета в кавычки необязательно.
Для сохранения результатов работы с языком R в виде файла можно использовать функцию write.csv, которая сохраняет данные в формате csv (от англ. comma-separated values – значения, разделённые запятыми), предназначенного для их сохранения в виде таблицы. Строка таблицы соответствует строке текста, которая содержит одно или несколько полей, разделенных запятыми.
Например, давайте создадим с помощью функции c() в R текстовый вектор с годами правления династии Юлиев-Клавдиев, первых пяти римских императоров (27 г. до н. э. - 68 г. н. э.), а затем его сохраним. Заметим, что название функции c() представляет собой сокращение от англ. слова concatenation – объединение, слияние. В отличие от функции paste(), которая из объединяемых элементов создает один текстовый вектор с одним элементом (т.е. «склеивает» объединяемые элементы), функция c() создает один вектор, но сохраняет внутри него обособленность объединяемых элементов. Внутри скобок этой функции объединяемые в один вектор элементы вводятся через запятую:
ЮлииКлавдии <-c('Август (27 г. до н.э.-14 г. н.э.)', 'Тиберий (14-37 гг. н.э.)', 'Калигула (37-41 гг. н.э.)', 'Клавдий (41-54 гг. н.э.)', 'Нерон (54-68 гг. н.э.)')
# если бы R понимал по-русски, эту функцию можно было бы написать:
# ЮлииКлавдии <-объединить('Август (27 г. до н.э.-14 г. н.э.)', 'Тиберий (14-37 гг. н.э.)'
# и т.д.)
# т.к. вектор ЮлииКлавдии создан с помощью функции c(), то в нем остались
# обособленными включенные в него элементы
# с помощью квадратных скобок выделим 3-й элемент
ЮлииКлавдии[3]
# ЮлииКлавдии[3-й элемент]
# [1] "Калигула (37-41 гг. н.э.)"
write.csv(ЮлииКлавдии, file = 'ЮлииКлавдии.csv')
# записать.csv(ЮлииКлавдии, file = 'ЮлииКлавдии.csv')
ЮлииКлавдии
Первая опция в функции write.csv(') содержит имя сохраняемого вектора, а вторая опция – заключенное в кавычки название файла, в котором пользователь собирается сохранить данные. Данные в этом формате файла будут сохранены в виде табличной форме, которая особенно удобна для хранения большого массива данных.
По умолчанию записываемый файл сохранится в текущей рабочей директории (ее имя у каждого пользователя должно быть свое), а если нужно сохранить эти данные в другой папке (например, если у вас есть папка 'C:/MyProjects'), то в этом случае указывается следующий путь доступа: 'С:/Myprojects/ЮлииКлавдии.csv'. Обратите внимание, что путь доступа заключен в кавычки и в конце содержит имя сохраняемого файла:
write.csv(ЮлииКлавдии, file = 'С:/ MyProjects/ЮлииКлавдии.csv')
Для того, чтобы сохраненный файл можно было использовать в новой сессии R следует использовать команду read.csv(), но читаемый файл не должен быть в этот момент открыт. В скобках read.csv() дается имя читаемого файла с обязательными кавычками:
ЮлииКлавдии <-read.csv(file = 'ЮлииКлавдии.csv')
# читать.csv(ЮлииКлавдии, файл = 'ЮлииКлавдии.csv')
ЮлииКлавдии
# ниже дан вывод данных в консоли, которые уже записаны в форме таблицы:
# X x
#1 1 Август (27 г. до н.э.-14 г. н.э.)
#2 2 Тиберий (14-37 гг. н.э.)
#3 3 Калигула (37-41 гг. н.э.)
#4 4 Клавдий (41-54 гг. н.э.)
#5 5 Нерон (54-68 гг. н.э.)
Если файл сохранить не в текущей рабочей папке, а в другой папке (например, в папке 'C:/Myprojects'), то в этом случае в командах write.csv() и read.csv() указывается путь доступа к нему:
write.csv(Флавии, file ='C:/Myprojects/Флавии.csv')
ЮлииКлавдии <-read.csv(file = 'С:/Myprojects/ ЮлииКлавдии.csv')
Завершая сессию R, не забудьте сохранить итоги работы. С этой целью вверху рабочего пространства RStudio нужно щелкнуть левой кнопкой мышки по иконке File и выбрать опцию Save, либо при первом сохранении нового файла – Save As… и дать ему название (нажать на клавиатуре символы Ctrl+S), либо если надо сохранить сразу несколько файлов – выбрать опцию Save All (нажать на клавиатуре символы Ctrl+Alt+S).
Выйти из RStudio можно либо щелкнув мышкой крестик в правом углу рабочего пространства, либо с помощью команды q(), введенной после того, как в консоли появится символ:
>
> q()
Задание к занятию № 1.4
1. Напишите, какую команду нужно вводить, начиная новую сессию в R? С какой целью вводится эта команда? Как проверить ее выполнение?
2. Напишите команду, с помощью которой можно проверить имя рабочей директории (папки)? Дайте ее русский перевод. Напишите команду, с помощью которой можно изменить имя рабочей директории (папки)? Дайте ее русский перевод.
3. Каким образом можно скопировать имя рабочей директории (папки)? Какую косую черту можно использовать в этом имени?
4. Для чего нужно указывать в R рабочую директорию? Что нужно делать в случае импорта файла не из рабочей директории, а с другой папки?
5. С помощью какой команды можно скачать с сайта CRAN отсутствующий в вашей библиотеке пакет timeDate? Нужно ли при этом обязательно ставить в кавычки название пакета? С помощью какой команды можно загрузить пакет timeDate из библиотеки вашего компьютера, для использования в текущей сессии? Нужно ли при этом обязательно ставить в кавычки название пакета?
6. Создайте текстовый вектор с годами правления династии римских императоров Флавиев (69-96 гг. н.э.) и сохраните его в виде отдельного файла в рабочей директории. Снова загрузите и прочитайте этот файл. Ответьте, почему вы сохраняли текстовый вектор в виде строки, а после загрузки сохраненного файла получили таблицу.
7. Сохраните текстовый вектор с годами правления династии римских императоров Флавиев в другой папке (не в рабочей директории). Снова загрузите и прочитайте этот файл.
8. Как сохранить итоги работы в R, когда вы: 1) в первый раз сохраняете файл; 2) неоднократно сохраняете файл; 3) хотите сразу сохранить несколько файлов.
9. Как закончить сессию и выйти из R?
Ответы к занятию № 1.4
1. Начинать новую сессию в R нужно со следующей команды: rm(list=ls()). Делается это для того, чтобы сохранившиеся от прошлой сессии объекты не влияли непредсказуемым образом на результаты текущей сессии. Проверить выполнение этой команды можно с помощью команды ls(). В случае ответа character(0) все оставшиеся от прошлой сессии объекты действительно удалены.
2. В начале сессии нужно проверить имя рабочей директории (папки) с помощью команды getwd(), что по-русски: означает получить.имя.папки(). Если мы хотим изменить рабочую директорию, то вводим команду setwd(), которую можно перевести как =установить.папку().
3. Для этого пользователю нужно открыть рабочую папку, подвести мышку к ее названию вверху открывшегося окна и щелкнуть правой кнопкой. В результате появится список опций, из которого нужно выбрать вариант: «Копировать адрес как текст». После чего скопированный адрес можно вставить в рабочий файл R, где поместить внутри скобок функции setwd(), а затем в этом адресе нужно заменить обратную косую черту \ на одну черту с наклоном вправо /, либо сделать их двойными.
4. В рабочей директории по умолчанию сохраняются полученные результаты. В случае импорта файла не из рабочей директории к нему нужно написать полный путь.
5. С помощью команды install.packages(‘timeDate’) этот пакет можно скачать на свой компьютер с сайта CRAN. Название пакета дается при этом обязательно в кавычках. С помощью команды library(timeDate) можно загрузить пакет timeDate из библиотеки своего компьютера для использования в текущей сессии. При этом ставить кавычки можно, но необязательно.
6. Текстовый вектор с годами правления с годами правления династии римских императоров Флавиев, создается с помощью функции с() в виде строки, но после его сохранения в файле с форматом csv он приобретает табличную форму. Введенный код должен быть следующим:
Флавии<-c('Веспасиан (69-79 гг. н.э.)', 'Тит(79-81 гг. н.э.)', 'Домициан (81-96 гг. н.э.)')
Флавии
write.csv(Флавии, file = 'Флавии.csv')
Флавии <-read.csv(file = 'Флавии.csv')
Флавии
# X x
#1 1 Веспасиан (69-79 гг. н.э.)
#2 2 Тит(79-81 гг. н.э.)
#3 3 Домициан (81-96 гг. н.э.
7. Название папки, не являющейся рабочей директории, и указываемый к ней путь у каждого пользователя будет различным. Одинаковым должно быть лишь имя сохраняемого файла 'Флавии.csv', которое дается в конце указываемого пути. Если вы сохраните этот файл в папке 'C:/Myprojects', то введенный путь у вас получится следующий:
write.csv(Флавии, file ='C:/Myprojects/Флавии.csv')
Флавии <-read.csv(file = 'C:/Myprojects/Флавии.csv')
8. При первом сохранении нового файла нужно щелкнуть мышкой по иконке File, выбрать опцию Save As… (либо нажать на клавиатуре символы Ctrl+S) и дать файлу название. При неоднократном сохранении достаточно выбрать опцию Save, а если надо сохранить сразу несколько файлов – выбрать опцию Save All (нажать на клавиатуре символы Ctrl+Alt+S).
9. Выйти из R с можно помощью команды: q().
Глава 2. Естественные и придуманные человеком меры времени
§1. В поисках меры времени
Любое измерение – это выяснение числового отношения измеряемой величины к единице измерения – однородной величине, в которой выражается результат измерения. Следовательно, чтобы измерить время нужно иметь меру, то есть иметь соотносимую с ним однородную единицу.
Все в мире имеет свое начало и конец, но далеко не все явления или процессы удобно использовать в качестве меры времени. О парадоксах, связанных с измерением времени, живший в IV-V вв. н.э. христианский философ Августин Блаженный написал следующее: «Я слышал от одного ученого человека, что движение солнца, луны и звезд и есть время, но я с этим не согласен. Почему тогда не считать временем движение всех тел? Если бы светила небесные остановились, а гончарное колесо продолжало двигаться, то не было бы и времени, которым мы измеряли бы его обороты?» [См. Блаженный Аврелий Августин, «Исповедь», кн.11, гл. XXIII. 29]
И, действительно, почему люди не измеряют время, например, периодом вращения гончарного круга? Очевидно потому, что движение круга зависит от руки гончара, то есть период его вращения – величина весьма краткосрочная, неравномерная и крайне непостоянная, зависимая от усердия конкретного человека. К тому же, любой процесс или явление, взятые в качестве меры времени, должны иметь не только постоянную длительность и периодичность, но еще и играть важную роль жизни общества.
Наша крошечная планета вместе со своим спутником Луной летит в бескрайнем космосе по эллиптической орбите вокруг Солнца со средней скоростью 29,8 км в секунду. И одновременно с этим Земля вращается как волчок вокруг своей воображаемой оси со средней скоростью на экваторе 465,1 м в секунду. Еще сложнее путь Луны, которая не только летит вслед за нашей планетой вокруг Солнца, но еще и двигается по своей орбите вокруг Земли (см. рис. 2.1 ).

Рис. 2.1 Орбита Земли и Луны вокруг Солнца (схема без учета масштабных пропорций).
Источник: схема выполнена в Paint.NET
Именно этот совместный полет Земли и Луны вокруг Солнца и дал человеку главные единицы измерения времени.
Во-первых, один полный оборот Земли вокруг своей оси дал людям такую единицу времени, обозначающую смену дня и ночи, как сутки.
Во-вторых, один полный цикл смены фаз Луны дал более крупную единицу измерения времени – месяц.
В-третьих, один полный оборот Земли вокруг Солнца дал еще более крупную единицу измерения времени – год, которым человек обозначил смену сезонов.
Впрочем, наши далекие предки об истинных причинах смены дня и ночи, фаз Луны и сезонов не знали. Они могли только видеть лишь внешние проявления этих природных явлений.
§2. Сутки и их границы
Благодаря тому, что Земля крутится вокруг своей оси, Солнце светит то на одну, то на другую ее сторону. Так происходит смена дня и ночи. Вся жизнь, труд и отдых человека определяются ритмом дня и ночи. Поэтому еще в глубокой древности сутки стали главной мерой времени. Их длительность определяется периодом вращения Земли вокруг своей оси.
В зависимости от способа, которым измеряют длительность суток, различают звездные и солнечные сутки. Одно полное вращение Земли вокруг своей оси относительно выбранной в качестве ориентира звезды – это звездный день. В то время как одно полное вращение Земли вокруг своей оси относительно Солнца, которое ведет к смене дня и ночи – это солнечный день.
Таким образом, звездные сутки – это время, которое требуется для двух последовательных прохождений одной и той же звезды через меридиан наблюдателя (проекцию земного меридиана на небесную сферу). В то время как солнечные сутки – это время, которое требуется для двух последовательных прохождений Солнца через меридиан наблюдателя. И в том, и в другом случае речь идет о ежесуточном вращении Земли вокруг своей оси, но в качестве точки отсчета используются разные ориентиры.
Очевидно, что за звездные сутки Земля делает один оборот вокруг свой оси =360°. Но начало звездных суток расходится с началом солнечных суток, то есть с началом дня и ночи. Так как Земля не только вращается с запада на восток (поэтому для нас Солнце встает на востоке) вокруг своей оси, но еще и перемещается по орбите вокруг Солнца.
Полный оборот Земли по околосолнечной орбите составляет 365.2422 суток, составляющих один тропический год (время от одного весеннего равноденствия до другого). Следовательно, положение Земли относительно Солнца ежесуточное меняется на 360°/365.2422 суток или на 0.9856°. Поэтому чтобы занять ту же позицию к Солнцу Земле приходится каждые сутки дополнительно вращаться вокруг своей оси еще на 0.9856°.
Из соотношения 360.9856°/360° узнаем, что звездные сутки 1.002738 раза короче обычных суток=24 час. Отсюда легко найти, что звездные сутки равны 24/1.002738=23.93448 или 23 ч. 56 м и 4 с. (ниже мы напишем функцию по переводу времени в 60-ричный формат). Поэтому для того, чтобы меридиан наблюдателя совершил один полный оборот вокруг Солнца требуется дополнительно еще 24 ч-23 ч. 56 м и 4 с. = 3 м 56 с., то есть на величину, на которую звездные сутки короче обычных.
Нетрудно определить, что в тропическом году насчитывается 365.2422*1.002738=366.2422 звездных суток. Эта разница нарастает со скоростью почти два часа в месяц, а за год – набегают одни дополнительные звездные сутки.
Время, измеряемое в звездных сутках, широко используют в астрономии, т. к. это удобно для наблюдения за звездным небом. По звёздным часам любая звезда восходит и заходит всегда в одно и то же время. В древности и в средние века звездные «часы» также использовались ночью для определения обычного времени. Одним из первых их стали применять древние египтяне, о чем мы расскажем ниже.
Понимание «суток» как совокупности дня и ночи появилось не сразу. В языках многих народов слово «день» и сегодня имеет два значения – «светлое время суток» и собственно «сутки», понимаемые как совокупность «дня и ночи». По всей видимости, второе значение у слова «день» более позднего происхождения, а специальный термин для обозначения суток появился еще позже.
Так, в древнерусских источниках не встречается слово «сутки», но вместо него используется «день», либо словосочетание «день и нощь». Согласно данным этимологии, русское слово «сутки» первоначально обозначало не совокупность дня и ночи, а ««стык дня и ночи», то есть границу между ними. [См. Фасмер М. Этимологический словарь русского языка, т. 3, с. 811]. В древнегреческом языке сложное слово nykhthemeron – «ночь и день» впервые засвидетельствовано лишь с I века н.э.». [См. Э. Бикерман «Хронология древнего мира: Ближний Восток и античность», М., 1975, с 10].
В зависимости от используемого календаря разные народы в древности и средневековье по-разному определяли границы суток. Так у жителей древнего Египта, живших по солнечному календарю, который из-за своего несовершенства был блуждающим, сутки начинались и заканчивались в утренние сумерки, то есть в самом начале рассвета, еще до восхода Солнца.
По вавилонскому лунно-солнечному календарю, которым пользовались вавилоняне, ассирийцы и другие жители Месопотамии, начало нового месяца определялось по 1-й вечерней видимости новой Луны и день начинался и заканчивался вечером. Об этом свидетельствуют не только записи в вавилонских «Астрономических дневниках», но и вавилонские гороскопы. [См. ABRAHAM J. SACHS and HERMANN HUNGER. ASTRONOMICAL DIARIES AND RELATED TEXTS FROM BABYLONIA. Vol. I, Diaries from 652 B.C. to 262 B.C. WIEN 1988, p. 13 и FRANCESCA ROCHBERG. Babylonian Horoscopes//Transactions of the American Philosophical Society. Vol. 88, Pt. 1 American Philosophical Society Independence Square a Philadelphia, 1998, p. 23].
У иудеев, которые до их изгнания из Палестины в 135 г., определяли начало нового месяца по 1-му дню вечерней видимости новой Луны, а с IV в. постепенно перешли к арифметическому лунно-солнечному календарю, день также начинался вечером. [См., Time, Astronomy, and Calendars in the Jewish Tradition. Edited by Sacha Stern and Charles Burnett, Brill, 2014, pp. 39-40, 155-156, 212].
Говоря о границах римских суток, Плиний Старший написал следующее: «… римские жрецы и те, кто установил наше официальное счисление времени, — от полуночи до полуночи … [См. Pliny. Natural history in ten volumes. Harvard university press. L., 1967, vol. II, 188, pp. 319-321]. При этом римляне различали гражданские и естественные сутки. Гражданские сутки в Древнем Риме начинались и заканчивались в полночь, а естественные – после восхода Солнца. [См. Авл Геллий, III, 2//Авл Геллий. АТТИЧЕСКИЕ НОЧИ, книги 1-Х, СПб, 2007, сс. 167-170].
В древнем Китае новый день, по меньшей мере, с конца II в. до н.э. также как и у римлян, начинался в полночь и заканчивался в полночь. Правда, это было не всегда, так в эпоху государства Шан-Инь, существовавшего с 1554 г. по 1046 г. до н.э., сутки длились от восхода и до следующего восхода Солнца. Переход на сутки, начинающиеся в полночь у китайцев произошел во времена правления династии Чжоу, закончившееся в 255 г. до н.э. [См. Jean-Claude Martzloff. Astronomy and Calendars – The Other Chinese Mathematics. 104 BC–AD 1644, Springer-Verlag Berlin Heidelberg 2016, p. 62 и Bonnie Blackburn & Leofranc Holford-Strevens. The Oxford companion to the year. Oxford University Press Inc., New York, 1999, p. 661].
Вместе с тем из-за примитивности источников искусственного освещения начало и конец рабочего дня в древности и средневековье обычно совпадали с естественной продолжительностью светлого времени суток. В этом смысле трудовой ритм у разных народов практически не отличался. Вот, что по этому поводу писал римский энциклопедист Плиний Старший (23/24 г. н. э.-. 79 г. н. э.): «фактическая продолжительность дня разными людьми считается по разному …, но простыми людьми везде – от рассвета до темноты» [См. Pliny. Natural history in ten volumes. Harvard university press. L., 1967, vol. II, 188, pp. 319-321].
Естественные сутки удобны тем, что в этом случае можно вести счет времени отдельно для светлого и темного времени, начиная от восхода и захода Солнца. При этом восход берется в качестве исходной точки для счета светлого времени суток по солнечным часам, а после его захода ночное время определяется по звездам. Поэтому в древности и средневековье, то есть в эпоху до появления механических часов, отдельный счет светлого и темного времени суток (об этом подробнее расскажем ниже) широко применялся многими народами вне зависимости от того, какие у них были календарные границы суток.
§3. Тропический год
Из-за того, что Земля вращается вокруг своей оси, происходит смена дня и ночи, а за счет ее годичного полета вокруг Солнца – смена сезонов. Но при этом ось летящей Земли наклонена на 66,5° к ее орбите. С сезонным циклом связан весь распорядок хозяйственной жизни человечества.
Поэтому обществу приходится учитывать периодическую смену времен года, особенно в умеренном климате. Для этого используется солнечный год, который называют также тропическим (от др.-греч. слова «тропос» – поворот, что означает смену одного сезона другим). Тропическим годом называют интервал между двумя последовательными пребываниями Солнца в точке весеннего равноденствия, которое в северном полушарии сегодня бывает 20 или 21 марта по григорианскому календарю (ГК). Длина этого года – 365 дней 5 час. 48 мин. 46 сек. или 365,2422 суток.
В дни весеннего и осеннего равноденствий Солнце находится в таком положении к Земле, что его лучи равномерно падают на северное и южное полушария. Тогда на всей Земле – кроме северных и южных полярных широт – день почти равен ночи. Для южного полушарие день весеннего равноденствия будет днем осеннего равноденствия. Но зато 22 или 23 сентября там происходит весеннее равноденствие, которое в северном считается осенним.
Тем не менее во время равноденствий светлая часть суток чуть длиннее ночи по следующим двум причинам. Во-первых, из-за рефракции, т. к. из-за преломления лучей в атмосфере только что зашедшее Солнце на некоторое время как бы приподнимается над горизонтом. Во-вторых, из-за асимметрии этого явления, обусловленного тем, что восход начинается в тот момент, когда верхний край Солнца поднимется над горизонтом, а заход – когда его верхний край опускается.
В июне-августе северный полюс Земли так наклонен к Солнцу, что в северных полярных широтах стоит долгий полярный день. А южный полюс, напротив, погружен в полярную ночь. Чем выше над горизонтом Солнце, тем теплее. И потому в июне-августе в северном полушарии стоит лето, а в южном полушарии – зима.
В полдень 20 или 21 июня Солнце в северном полушарии поднимается до максимальной высоты над горизонтом, а в южном – до самой низкой. Соответственно, в первом полушарии наступает самый длинный день в году, который называют днем летнего солнцестояния. А в другом полушарии это самый короткий день – день зимнего солнцестояния.
В декабре-феврале зима приходит в северное полушарии, а лето – в южное. Поэтому в 21 или 22 декабря в южном полушарии будет самый длинный день – день летнего солнцестояния, а в северном – зимнего, который будет самым коротким в году.
Хотя самого полета Земли вокруг Солнца мы не замечаем, но зато в темное время суток можем видеть, как по мере этого движения меняется расположение звезд на небе. Причем, практически ровно через год прежний рисунок звездного неба повторяется.
В древности люди не знали, что Земля летит по орбите вокруг Солнца. Напротив, тогда нашу планету считали неподвижной, вокруг которой вращаются Солнце, Луна, планеты и звезды. Поэтому плоскость земной орбиты древние астрономы назвали эклиптикой – большим кругом небесной сферы, по которому происходит видимое годичное движение Солнца. Термин «эклиптика» произошел от др.-греч. слова «эклипсис» – затмение. Это связано с тем, что солнечные и лунные затмения происходят только тогда, когда Луна находится вблизи точек пересечения ее орбиты с эклиптикой.
Как считает известный австрийский и американский ученый Отто Нойгебауэр (1899-1990 гг.), примерно в IV вв. до н.э. астрономы для удобства в отсчете положения Солнца на эклиптике придумали своего рода координаты, разделив этот большой круг небесной сферы на 12 равных частей с дугой в 30°. Каждую из этих частей обозначили знаком того созвездия, через которое в том или ином месяце проходило Солнце. Так как большинство созвездий носят имена животных, то их стали называть «знаками зодиака» (от др.-греч. слов «зодиакос киклос» – круг животных). [См. David H. Kelley, Eugene F. Milone. Exploring Ancient Skies, 2nd Edition, New York, 2011, p 26-28].
При этом точку, которую Солнце проходит в момент весеннего равноденствия, древнегреческий астроном Гиппарх Никейский (ок. 190 до н. э.-ок. 120 до н. э.), принял за начало отсчета долгот (0°), т. е. угловых расстояний в эклиптике, а точки летнего солнцестояния, осеннего равноденствия и зимнего солнцестояния, соответственно, равными 90°, 180° и 270°. Гиппархом же построена первая таблица движения Солнца, т. е. таблица, позволяющая вычислить его долготу на каждый день. [См. Н.И. ИДЕЛЬСОН. ЭТЮДЫ ПО ИСТОРИИ НЕБЕСНОЙ МЕХАНИКИ. Изд., «НАУКА», М., 1975. С. 405].
Эклиптические долготы видимого нахождения Солнца в каждом из зодиакальных созвездий в 2000-100 гг. до н. и в современную эпоху даются в табл. 2.1. Смещение долготы произошло из-за так называемого явления прецессии, с которым мы познакомимся чуть позже.
Табл. 2.1. Видимое ежегодное перемещение Солнца по созвездиям эклиптики

Примечания. 1. Даты в зависимости от года могут отличаться на +1 или -1 день.
Источники : David H. Kelley, Eugene F. Milone. Exploring Ancient Skies, 2nd Edition, New York, 2011, p 26-28; JAMES EVANS. THE HISTORY & PRACTICE OF ANCIENT ASTRONOMY, Oxford University Press, 1998, p. 96.
Весь цикл смены времен года завершается, когда Солнце возвращается в точку весеннего равноденствия. И если бы точка весеннего равноденствия занимала всегда одно и тоже положение среди звезд, то смена времен года происходила бы в течение звездного года. Но длина тропического года, исчисляемая по «среднему Солнцу», равна 365 суткам 5 часам 48 минутам и 46 секундам, а звездного года = 365 среднесолнечным суткам 6 часам 9 минутам 9 секундам. Таким образом тропический год короче звездного на 20 мин. и 23 сек.
Еще греческий астроном Гиппарх во II в. до н. э. открыл явление так называемой прецессии, или предварения равноденствий. Его суть в том, что точки равноденствий сами смещаются среди звезд очень медленно навстречу движению Солнца по эклиптике. Таким образом Солнце каждый год встречает точку весеннего равноденствия немного раньше, чем возвращается к той же звезде. За 72 года точка весеннего равноденствия смещается по эклиптике на 1°, за 1000 лет — на 14° и т. д. Примерно за 26 000 лет она сделает полный круг на небесной сфере. В прошлом же – около 4000 лет назад – точка весеннего равноденствия находилась в созвездии Тельца недалеко от звездного скопления Плеяд. [См. И. А. КЛИМИШИН. КАЛЕНДАРЬ И ХРОНОЛОГИЯ. Изд. 3-е.. пер. и доп.. М., «НАУКА», 1990, с. 44].
Так что для строителей древнеегипетских пирамид весеннее равноденствие наступало в тот момент, когда Солнце находилось в созвездии Тельца (до XX в. до н.э.). а для древневавилонских астрономов – в созвездии Овна (2000 г. до н.э.-100 г. до н. э.). В наше время весеннее равноденствие наступает тогда, когда Солнце находится в созвездии Рыбы. а. [См. David H. Kelley, Eugene F. Milone. Exploring Ancient Skies, 2nd Edition, New York, 2011, p 26-28].
The free sample has ended.