А. Б. Шипунов, Е. М. Балдин, П. А. Волкова, А. И. Коробейников, С. А. Назарова
Скачать 3.04 Mb.
|
Если вы хотите всегда иметь самую свежую версию, вам надо будет скачивать 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) |