Главная страница

А. Б. Шипунов, Е. М. Балдин, П. А. Волкова, А. И. Коробейников, С. А. Назарова


Скачать 3.04 Mb.
НазваниеА. Б. Шипунов, Е. М. Балдин, П. А. Волкова, А. И. Коробейников, С. А. Назарова
Анкорrbook
Дата29.09.2022
Размер3.04 Mb.
Формат файлаpdf
Имя файлаrbook.pdf
ТипДокументы
#705644
страница4 из 19
1   2   3   4   5   6   7   8   9   ...   19
Если вы хотите всегда иметь самую свежую версию, вам надо будет скачивать R из так называемого CRAN (Comprehensive R
Archive Network). У этого сайта довольно много зеркал (копий),
так что выбирайте подходящее. Скачать можно как исходный код для последующей компиляции, так и собранный бинарный пакет
(последнее, естественно, не всегда возможно). Кстати говоря, ис- ходный код R компилируется очень просто.
Mac OS X.
Для того чтобы начать работать с R в Mac OS X, надо сна- чала убедиться, что у вас последняя версия этой операционной си- стемы. Последние версии R выходят только под последние версии
Mac OS. Установочный пакет скачивается с CRAN (не забудьте также скачать оттуда Tcl/Tk). Имейте в виду, что графическая оболочка R для Mac (R Mac GUI) обновляется быстрее, чем сам
R
, поэтому разработчики предусмотрели возможность скачивания и установки оболочки отдельно. Установка происходит практиче- ски так же, как установка любой программы под Mac. Надо еще

28
Как обрабатывать данные отметить, что R завоевал себе популярность не в последнюю оче- редь тем, что он запускался под Mac, в то время как S-Plus под эту платформу был недоступен.
Windows.
Для того чтобы запускать R, можно иметь любые версии этой операционной системы, начиная с Windows 95. Как и в преды- дущем случае, установочный пакет скачивается с CRAN. Опять- таки, установка напоминает обычную для Windows. Есть програм- ма-установщик, которая задает несколько вопросов, от ответов на которые ничего серьезного не зависит. После инсталляции появ- ляется ярлык, щелкнув на который, можно запускать R.
Здесь интересно заметить, что Windows-инсталляция R является,
как это принято сейчас говорить, «portable» и может запускаться,
например, с флэшки или лазерного диска. R делает пару записей в реестр, но для работы они совершенно не критичны. Единствен- ное, что надо при этом иметь в виду,— рабочая папка должна быть открыта для записи, иначе вам некуда будет записывать ре- зультаты работы. Еще одна вещь, важная для всех операционных систем: R (в отличие от S-Plus) держит все свои вычисления в оперативной памяти, поэтому если в процессе работы, скажем,
выключится питание, результаты сессии, не записанные явным образом в файл, пропадут. (Тут надо заметить, что существует пакет SOAR, который изменяет это поведение.)
2.6. Как начать работать в R
2.6.1. Запуск
Каждая операционная система имеет свои особенности работы. Но в целом можно сказать, что под все три упомянутые выше операционные системы существует так называемый «терминальный» способ запуска,
а под Mac и Windows имеется свой графический интерфейс (GUI) с некоторыми дополнительными возможностями (разными в разных опе- рационных системах).
Терминальный способ прост: достаточно в командной строке терми- нала (пользователи Windows часто называют его «черным окошком»
или «окном DOS») набрать
$ R
,—
и появится вводный экран системы. Под Windows это немного слож- нее — необходимо вызывать программу Rgui.exe, причем для этого на- до либо «находиться» в той же папке, где находится эта программа,
либо путь к этой папке должен быть прописан в переменной PATH. Кро- ме того, для того чтобы в русскоязычной Windows вводный экран был

Как начать работать в R
29
читаем, надо сменить в окне терминала кодировку (командой «chcp
1251
») и установить соответствующий шрифт (скажем, Lucida Con- sole). Если в UNIX терминал запущен без графической среды (X11), то все изображения будут «скидываться» в один многостраничный PDF- файл Rplots.pdf. Под Mac это будет происходить, даже если X11 за- пущен, так что полноценно использовать R под Mac можно только в
GUI-варианте. Терминальный запуск под Windows таких ограничений не имеет.
В дальнейшем договоримся, что под «сессией R» мы будем иметь в виду терминальный запуск под X11 в Linux и GUI-запуск в Windows и Mac. GUI под эти операционные системы построены так, что они все равно запускают терминал-подобное окно — общение с R возмож- но только в режиме диалога, «команда — ответ». Полноценного GUI с
R
не поставляется, хотя существуют многочисленные попытки создать такую систему. Одна из лучших, на наш взгляд, — это R Сommander,
советуем также обратить внимание на RStudio; о них мы еще поговорим в приложении. Но, вообще-то, система из меню и окошек не способна заменить полноценного интерфейса командной строки, особенно в слу- чае таких сложных систем, как R. Интересно, что S-Plus имеет очень приличный GUI, но если вы откроете любой учебник по этой систе- ме, вы увидите, что авторы настоятельно рекомендуют пользоваться командной строкой.
Особенность R GUI под Windows — ее можно запустить в много-
(MDI) и однооконном (SDI) режимах. Настоятельно рекомендуем вам второй, тем более что все остальные реализации R только его и «умеют».
Когда вы запустили R, первым делом появляется вводный экран. Ес- ли у вас русифицированная система, то вы увидите надпись по-русски.
Если по какой-то причине вам надо видеть все по-английски, устано- вите переменную LANGUAGE — создайте файл Renviron.site, в который внесите строчку
LANGUAGE=en
Этот файл должен находиться в так называемой «домашней» ди- ректории R. Более подробно про это можно узнать, если прочитать по- мощь по команде Startup(). Под Linux вызвать R таким способом еще проще — надо внести в строку вызова опцию (ту же самую строчку).
2.6.2. Первые шаги
Перед тем как начать работать, надо понять, как выйти. Для этого надо ввести одну команду, нажать Enter и ответить на один вопрос:
q()

30
Как обрабатывать данные
Save workspace image? [y/n/c]: n
Уже такой простой пример показывает, что в R любая команда имеет аргумент в круглых скобках. Если аргумент не указан, скобки все равно нужны. Если вы забудете это сделать, то вместо выхода из R получите определение функции:
> q function (save = "default", status = 0, runLast = TRUE)
.Internal(quit(save, status, runLast))


Как узнать, как правильно вызывать функцию? Для этого надо на- учиться получать справку. Есть два пути. Первый — вызвать команду справки:
help(q)
или
?q
И вы увидите отдельное окно либо (если вы работаете в Linux) текст помощи в основном окне программы (выход из этого режима — по кла- више «q»). Если внимательно прочитать текст, становится ясно, что выйти из R можно, и не отвечая на вопрос, если ввести q("no").
Зачем же нужен этот вопрос? Или, другими словами, что будет, если ответить положительно? В этом случае в рабочую папку R (ту, из ко- торой он вызван) запишутся два файла: бинарный .RData и текстовый
.Rhistory
. Первый содержит все объекты, созданные вами за время сессии. Второй — полную историю введенных команд.
Когда вы работаете в R, предыдущую команду легко вызвать, нажав клавишу-стрелку «вверх». Но если вы сохраните файл .Rhistory, ваши команды будут доступны и в следующей сессии — при условии, что вы вызовете R из той же самой папки. И наоборот, если вы случайно сохраните рабочую среду (эти два файла), то при следующем старте они загрузятся автоматически. Иногда такое поведение R становится причиной различных недоумений, так что будьте внимательны!
2.7. R и работа с данными: вид снаружи
2.7.1. Как загружать данные
Сначала о том, как набрать данные прямо в R. Можно, например,
использовать команду c():

R и работа с данными: вид снаружи
31
> a <- c(1,2,3,4,5)
> a
[1] 1 2 3 4 5
Здесь мы получаем объект a, состоящий из чисел от одного до пяти.
Можно использовать команды rep(), seq(), scan(), а также опера- тор двоеточия:
> b <- 1:5
> b
[1] 1 2 3 4 5
Можно воспользоваться встроенной в R подпрограммой — электрон- ной таблицей наподобие сильно упрощенного Excel, для этого надо на- брать команду data.entry(b).
В появившейся таблице можно редактировать данные «на месте», то есть все, что вы ввели, непосредственно скажется на содержании объ- екта. Это несколько противоречит общим концепциям, заложенным в
R
, и поэтому есть похожая функция de(), которая не меняет объект, а выдает результат «наружу». Если же у вас уже есть таблица данных,
можно использовать команды fix() или edit(), которые в данном слу- чае вызовут тот же Excel-подобный редактор.
Функция edit(), вызванная для другого типа объекта, запустит его редактирование в текстовом редакторе (под Windows это обычно
Notepad или Блокнот), и вы сможете отредактировать объект там. Ес- ли вы хотите поменять редактор, напишите, например:
options(editor="c:\\Program Files\\CrazyPad\\crazypad.exe")
Однако лучше всего научиться загружать в R файлы, созданные при помощи других программ, скажем, при помощи Excel. Имейте в виду,
что такие данные имеют очень разный формат, и написать по этому вопросу сколько-нибудь компактное руководство трудно. Но мы все же попробуем.
В целом данные, которые надо обрабатывать, бывают двух типов —
текстовые и бинарные. Не вдаваясь в детали, примем, что текстовые —
это такие, которые можно прочитать и отредактировать в любом тек- стовом редакторе («Блокнот», Notepad, TextEdit, Vi). Для того чтобы отредактировать бинарные данные, нужна, как правило, программа,
которая эти данные когда-то вывела. Текстовые данные для статисти- ческой обработки — это обычно текстовые таблицы, в которых каждая строка соответствует строчке таблицы, а колонки определяются при по- мощи разделителей (обычно пробелов, знаков табуляции, запятых или точек с запятой). Для того чтобы R «усвоил» такие данные, надо, во-

32
Как обрабатывать данные первых, убедиться, что текущая папка в R и та папка, откуда будут загружаться ваши данные,— это одно и то же. Для этого в запущенной сессии R надо ввести команду
> getwd()
[1] "d:/programs/R/R-2.14.1"
Допустим, что это вовсе не та папка, которая вам нужна. Поменять рабочую папку можно командой:
setwd("e:\\wrk\\temp")
> getwd()
[1] "e:/wrk/temp"
Обратите внимание на работу с обратными слэшами под Windows:
вместо одного слэша надо указывать два, только тогда R их поймет. Под
Linux и Mac OS X все проще: там по умолчанию используются прямые слэши «/», с которыми проблем никаких нет. Кстати, под Windows тоже можно использовать прямые слэши, например:
setwd("e:/wrk/temp")
> getwd()
[1] "e:/wrk/temp"
Дальше надо проверить, есть ли в нужной поддиректории нужный файл:
> dir("data")
[1] "mydata.txt" ...
Теперь можно, наконец, загружать данные. (Предполагается, что в текущей директории у вас есть папка data, а в ней — файл mydata.txt.
Если это не так, то для того, чтобы запустить этот пример, нужно скачать файл с упомянутого в предисловии сайта, создать папку data и поместить туда файл). Данные загружает команда read.table():
> read.table("data/mydata.txt", sep=";", head=TRUE)
a b c
1 1 2 3 2 4 5 6 3 7 8 9

R и работа с данными: вид снаружи
33
Это ровно то, что надо, за тем исключением, что перед нами «ро- яль в кустах» — авторы заранее знали структуру данных, а именно то,
что у столбцов есть имена (head=TRUE), а разделителем является точка с запятой (sep=";"). Функция read.table() очень хороша, но не на- столько умна, чтобы определять формат данных «на лету». Поэтому вам придется выяснить нужные сведения заранее, скажем, в том же самом текстовом редакторе. Есть и способ выяснить это через R, для этого используется команда file.show("data/mydata.txt"). Она выво- дит свои данные таким же образом, как и help(),— отдельным окном или в отдельном режиме основного окна. Вот что вы должны увидеть:
a;b;c
1;2;3 4;5;6 7;8;9
Вернемся к предыдущему примеру. В R многие команды, в том числе и read.table(), имеют умалчиваемые значения аргументов. Например,
значение sep по умолчанию "", что в данном случае означает, что раз- делителем является любое количество пробелов или знаков табуляции,
поэтому если в ваших данных вместо точек с запятыми — пробелы,
можно аргумент sep не указывать. Естественно, бывает безумное мно- жество различных частных случаев, и как бы мы ни старались, все не описать. Отметим, однако, еще несколько важных вещей:
1. Русский текст в файлах обычно читается без проблем. Если все же возникли проблемы, то лучше перевести все в кодировку UTF-8
(при помощи любой доступной утилиты перекодирования, скажем iconv
) и добавить соответствующую опцию:
> read.table("data/mydata.txt", sep=";", head=TRUE,
+ encoding="UTF-8")
2. Иногда нужно, чтобы R прочитал, кроме имен столбцов, еще и имена строк. Для этого используется такой прием:
> read.table("data/mydata2.txt", sep=";", head=TRUE)
a b c one
1 2 3
two
4 5 6
three 7 8 9

34
Как обрабатывать данные
В файле mydata2.txt в первой строке было три колонки, а в остальных строках — по четыре. Проверьте это при помощи file.show()
3. Данные, которые выдают многие русифицированные программы,
в качестве десятичного разделителя обычно используют запятую,
а не точку. В этих случаях надо указывать аргумент dec:
> read.table("data/mydata3.txt", dec=",", sep=";", h=T)
Обратите внимание на сокращенное обозначение аргумента и его значения. Сокращать можно, но с осторожностью, поэтому даль- ше в тексте мы всегда будем писать TRUE или FALSE, хотя на прак- тике многие используют просто T или F.
Итак, можно сказать, что один из возможных способов работы с данными в R такой:
1) данные набирают в какой-нибудь «внешней» программе;
2) записывают их в текстовый файл с разделителями (см. выше);
3) загружают как объект в R и работают с этим объектом, возможно,
внося изменения;
4) если были изменения, командой write.table() (про нее см. сле- дующий подраздел) записывают обратно в файл;
5) импортируют как текстовый файл в исходную программу и рабо- тают дальше.
Такой способ выглядит сложновато, но позволяет использовать все преимущества программ по набору электронных таблиц и текстовых редакторов.
С электронными таблицами в текстовом формате больших проблем обычно не возникает. Разные экзотические текстовые форматы, как правило, можно преобразовать к «типичным», если не с помощью R, то с помощью каких-нибудь текстовых утилит (вплоть до «тяжеловесов»
типа языка Perl). А вот с «посторонними» бинарными форматами дело гораздо хуже. Здесь возникают прежде всего проблемы, связанные с закрытыми и/или недостаточно документированными форматами, та- кими, например, как формат программы MS Excel. Вообще говоря, от- вет на вопрос, как прочитать бинарный формат в R, часто сводится к совету по образцу известного анекдота — «выключим газ, выльем воду

R и работа с данными: вид снаружи
35
и вернемся к условию предыдущей задачи». То есть надо найти способ,
как преобразовать (с минимальными потерями значимой информации,
естественно) бинарные данные в текстовые таблицы. Проблем на этом пути возникает обычно не слишком много.
Второй путь — найти способ прочитать данные в R без преобразо- вания. В R есть пакет foreign, который может читать бинарные дан- ные, выводимые пакетами MiniTab, S, SAS, SPSS, Stata, Systat, а также формат DBF. Чтобы узнать про это подробнее, надо загрузить пакет
(командой library(foreign)) и вызвать общую справку по его коман- дам (например, командой help(package=foreign) или просто посмот- реть справку по пакету через браузер, который откроется по команде help.start()
).
Что касается других распространенных форматов, скажем, форма- тов MS Excel, здесь дело хуже. Есть не меньше пяти разных спосо- бов, как загружать в R эти файлы, но все они имеют ограничения.
Изо всех способов нам наиболее привлекательным представляется об- мен с R через буфер. Если у вас открыт Excel, то можно скопировать в буфер любое количество ячеек, а потом загрузить их в R командой read.table("clipboard")
Это просто и, главное, работает с любой Excel-подобной программой,
в том числе с «новым» Excel, Gnumeric и OpenOffice.org / LibreOffice
Calc.
Добавим еще несколько деталей:
1. R может загружать изображения. Для этого есть сразу несколь- ко пакетов, наиболее разработанный из них — pixmap. R может также загружать карты в формате ArcInfo и др. (пакеты maps,
maptools
) и вообще много чего еще. Чтобы загрузить такие паке- ты, нужно, в отличие от foreign, их сначала скачать из репози- тория. Для этого используется меню (под Windows) или команда install.packages()
(она работает на всех системах).
2. У R есть собственный бинарный формат. Он быстро записывает- ся и быстро загружается, но его нельзя использовать с другими программами:
> x <- "apple"
> save(x, file="x.rd") # Сохранить объект "x"
> exists("x")
[1] TRUE
> rm(x)
> exists("x")
[1] FALSE

36
Как обрабатывать данные
> dir()
[1] "x.rd" ...
> load("x.rd") # Загрузить объект "x"
> x
[1] "apple"
(Здесь есть несколько доселе не описанных команд. Для сохра- нения и загрузки бинарных файлов служат команды save() и load()
, для удаления объекта — команда rm(). Для того что- бы показать вам, что объект удален, мы использовали команду- проверку exists(). Все, что написано на строчке после символа
«#»,— это комментарий. Комментарии R пропускает, не читая).
3. Для R написано множество интерфейсов к базам данных, в част- ности для MySQL, PostgresSQL и sqlite (последний может вызы- ваться прямо из R, см. документацию к пакетам RSQLite и sqldf).
Рассматривать в подробностях мы их здесь не будем.
4. Наконец, R может записывать таблицы и другие результаты об- работки данных и, разумеется, графики. Об этом мы поговорим ниже.
2.7.2. Как сохранять результаты
Начинающие работу с R обычно просто копируют результаты рабо- ты (скажем, данные тестов) из консоли R в текстовый файл. И действи- тельно, на первых порах этого может быть достаточно. Однако рано или поздно возникает необходимость сохранять объемные объекты (ска- жем, таблицы данных), созданные в течение работы. Можно, как уже говорилось, использовать внутренний бинарный формат, но это не всег- да удобно. Лучше всего сохранять таблицы данных в виде текстовых таблиц, которые потом можно будет открывать другими (в частности,
офисными) приложениями. Для этого служит команда write.table():
> write.table(file="trees.csv", trees, row.names=FALSE, sep=";",
+ quote=FALSE)
1   2   3   4   5   6   7   8   9   ...   19


написать администратору сайта