Историческая хронология с языком R. Часть I Обучение программированию для датировки событий
Историческая хронология с языком R. Часть I Обучение программированию для датировки событий

Полная версия

Историческая хронология с языком R. Часть I Обучение программированию для датировки событий

Настройки чтения
Размер шрифта
Высота строк
Поля
На страницу:
3 из 5

Теперь давайте введем словосочетание 'Геродот из Галикарнаса' в редакторе кода (все, что водится обозначим курсивом):

А<-'Геродот из Галикарнаса'

#введем переменную А, чтобы узнать ее значение

А

#после чего консоль выдаст следующий текст:

# [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 из 5