<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="http://wiki2.linuxformat.ru/skins/common/feed.css?97"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://wiki2.linuxformat.ru/index.php?action=history&amp;feed=atom&amp;title=LXF102%3AR</id>
		<title>LXF102:R - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://wiki2.linuxformat.ru/index.php?action=history&amp;feed=atom&amp;title=LXF102%3AR"/>
		<link rel="alternate" type="text/html" href="http://wiki2.linuxformat.ru/index.php?title=LXF102:R&amp;action=history"/>
		<updated>2026-05-13T22:27:51Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.11.1</generator>

	<entry>
		<id>http://wiki2.linuxformat.ru/index.php?title=LXF102:R&amp;diff=7562&amp;oldid=prev</id>
		<title>Crazy Rebel: /* R и работа с данными */</title>
		<link rel="alternate" type="text/html" href="http://wiki2.linuxformat.ru/index.php?title=LXF102:R&amp;diff=7562&amp;oldid=prev"/>
				<updated>2009-04-08T06:32:53Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;R и работа с данными&lt;/span&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 06:32, 8 апреля 2009&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 98:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 98:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; три 7 8 9&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; три 7 8 9&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* По отечественным правилам, в качестве десятичного &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;разделителя&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* По отечественным правилам, в качестве десятичного &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;разделителянужно &lt;/ins&gt;использовать запятую, а не точку. Если кто-то при подготовке исходных данных этим правилам последовал, то необходимо переопределить аргумент '''dec''':&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;нужно &lt;/del&gt;использовать запятую, а не точку. Если кто-то при подготовке&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;исходных данных этим правилам последовал, то необходимо переопределить аргумент '''dec''':&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;  &amp;gt; read.table(“mydata3.txt”, dec=”,”, h=T)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;  &amp;gt; read.table(“mydata3.txt”, dec=”,”, h=T)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 125:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 123:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;  &amp;gt; help(package=foreign)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;  &amp;gt; help(package=foreign)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Что же касается пресловутого формата ''Excel'', то здесь дело обстоит&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Что же касается пресловутого формата ''Excel'', то здесь дело обстоит хуже. Существует не меньше пяти разных способов загрузить эти файлы в ''R'', но все они имеют ограничения. К тому же новый формат ''MS Excel 2007'' пока вообще не поддерживается. Из всех способов наиболее привлекательным представляется обмен с ''R'' через буфер. Если открыть в ''OpenOffice Calc'' '''XLS'''-файл, то можно скопировать в буфер&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;хуже. Существует не меньше пяти разных способов загрузить эти файлы в ''R'', но все они имеют ограничения. К тому же новый формат ''MS Excel 2007'' пока вообще не поддерживается. Из всех способов наиболее привлекательным представляется обмен с ''R'' через буфер. Если&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;открыть в ''OpenOffice Calc'' '''XLS'''-файл, то можно скопировать в буфер&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;обмена любое количество ячеек, а потом загрузить их в ''R'':&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;обмена любое количество ячеек, а потом загрузить их в ''R'':&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 134:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 130:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Это очень просто, и главное, работает с любой ''Excel''-подобной программой.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Это очень просто, и главное, работает с любой ''Excel''-подобной программой.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Тут следует отметить еще одну вещь: '''ни в коем случае не рекомендуется производить какой-либо статистический анализ в программах&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Тут следует отметить еще одну вещь: '''ни в коем случае не рекомендуется производить какой-либо статистический анализ в программах электронных таблиц'''. Не говоря уже о том, что Интернет просто забит статьями об ошибках в этих программах и/или в их статистических модулях, это еще и крайне неверно идеологически. Иначе говоря: '''Use ''R''!'''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;электронных таблиц'''. Не говоря уже о том, что Интернет просто забит&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;статьями об ошибках в этих программах и/или в их статистических модулях, это еще и крайне неверно идеологически. Иначе говоря: '''Use ''R''!'''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Добавим еще несколько деталей:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Добавим еще несколько деталей:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Crazy Rebel</name></author>	</entry>

	<entry>
		<id>http://wiki2.linuxformat.ru/index.php?title=LXF102:R&amp;diff=7560&amp;oldid=prev</id>
		<title>Crazy Rebel: викификация, оформление, иллюстрация</title>
		<link rel="alternate" type="text/html" href="http://wiki2.linuxformat.ru/index.php?title=LXF102:R&amp;diff=7560&amp;oldid=prev"/>
				<updated>2009-04-08T06:27:55Z</updated>
		
		<summary type="html">&lt;p&gt;викификация, оформление, иллюстрация&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая статья&lt;/b&gt;&lt;/p&gt;&lt;div&gt;: '''R''' Свободный инструментарий для статистической обработки данных&lt;br /&gt;
&lt;br /&gt;
[[Категория:Математические пакеты]][[Категория:Учебники]]&lt;br /&gt;
&lt;br /&gt;
==Данные и графики==&lt;br /&gt;
&lt;br /&gt;
{{Цикл/R}}&lt;br /&gt;
&lt;br /&gt;
: '''ЧАСТЬ 2''' Анализ «хороших» данных – это просто. А вот чтобы сделать ваши данные «хорошими», а затем и представить их – придётся попотеть. К счастью, '''Алексей Шипунов''' и '''Евгений Балдин''' знают, как облагородить невзрачные столбцы чисел.&lt;br /&gt;
&lt;br /&gt;
Подготовка данных к работе – одна из самых больших проблем для новичка в ''R''. Сама по себе обработка данных подробно описана в разных руководствах и пособиях, а вот информация,&lt;br /&gt;
как добиться того, чтобы ''R'' прочитал приготовленные в другой программе данные, как правило, опускается. Почему – вполне очевидно:&lt;br /&gt;
входные данные могут иметь слишком разный формат, чтобы написать&lt;br /&gt;
по этому вопросу исчерпывающее и компактное руководство.&lt;br /&gt;
&lt;br /&gt;
===R и работа с данными===&lt;br /&gt;
&lt;br /&gt;
Данные можно представить в текстовом или в двоичном виде. Не вдаваясь в детали, примем, что текстовые данные – это те, которые можно прочитать и отредактировать в текстовом редакторе (''Emacs/Vi'' и прочее). Чтобы отредактировать двоичные данные, как правило, нужна&lt;br /&gt;
программа, которая эти данные произвела.&lt;br /&gt;
&lt;br /&gt;
Текстовые данные для статистической обработки – это текстовые&lt;br /&gt;
таблицы, где каждая строка соответствует строчке таблицы, а колонки&lt;br /&gt;
определяются при помощи разделителей. Обычно в качестве разделителей текстовых данных используются пробельные символы (пробел,&lt;br /&gt;
табуляция и тому подобное), запятые или точки с запятой.&lt;br /&gt;
&lt;br /&gt;
Первое, что надо сделать перед чтением данных – это убедиться, что&lt;br /&gt;
текущая директория в ''R'' и та директория, где находятся данные, есть&lt;br /&gt;
одно и то же. Для этого в запущенной сессии ''R'' надо ввести команду:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; getwd()&lt;br /&gt;
 [1] “/home/username/”&lt;br /&gt;
&lt;br /&gt;
Пусть это вовсе не та директория, в которой лежат данные. Тогда поменять ее можно командой:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; setwd(“./workdir”)&lt;br /&gt;
 &amp;gt; getwd()&lt;br /&gt;
 [1] “/home/username/workdir”&lt;br /&gt;
&lt;br /&gt;
Как обычно, развернутую справку можно получить с помощью&lt;br /&gt;
вызова ''help(getwd)''.&lt;br /&gt;
&lt;br /&gt;
Далее следует проверить, есть ли в текущей директории нужный файл:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; dir()&lt;br /&gt;
 [1] “mydata.txt”&lt;br /&gt;
&lt;br /&gt;
Вот теперь можно и загрузить данные. За чтение табличных текстовых данных отвечает команда '''read.table()''':&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; read.table(“mydata.txt”, sep=”;”, head=TRUE)&lt;br /&gt;
 абв&lt;br /&gt;
 1123&lt;br /&gt;
 2456&lt;br /&gt;
 3789&lt;br /&gt;
&lt;br /&gt;
Все очень просто, за исключением того, что перед чтением нужно&lt;br /&gt;
знать, в каком формате хранятся данные – а именно, что у столбцов&lt;br /&gt;
есть имена ('''head=TRUE''') и что разделителем является точка с запятой&lt;br /&gt;
('''sep=”;”'''). Функция '''read.table()''' очень хороша, но не настолько умна, чтобы определять формат данных на лету. Чтобы просмотреть содержимое&lt;br /&gt;
файла, не выходя из ''R'', можно воспользоваться функцией '''file.show()''':&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; file.show(“mydata.txt”)&lt;br /&gt;
 а;б;в&lt;br /&gt;
 1;2;3&lt;br /&gt;
 4;5;6&lt;br /&gt;
 7;8;9&lt;br /&gt;
&lt;br /&gt;
Многие команды ''R'', включая и '''read.table()''', имеют для аргументов значения по умолчанию. Например, значение '''sep''' по умолчанию&lt;br /&gt;
равно '''“”'''. В данном случае это означает, что разделителем является&lt;br /&gt;
любое количество пробелов или знаков табуляции, поэтому если данные вместо точек с запятыми разделены пробельными символами,&lt;br /&gt;
то аргумент '''sep''' можно не указывать. Естественно, бывает безумное&lt;br /&gt;
множество различных частных случаев, и сколько бы усилий ни было&lt;br /&gt;
приложено, все не описать. Отметим, однако, еще несколько важных&lt;br /&gt;
моментов:&lt;br /&gt;
&lt;br /&gt;
* Файлы можно загружать и из других директорий, при этом можно использовать относительную адресацию:&lt;br /&gt;
 &amp;gt; read.table(“../workdir/mydata.txt”)&lt;br /&gt;
* Русский текст в файлах читается без проблем, если он набранв кодировке, совпадающей с текущей локалью. Пусть локаль – '''ru_RU.KOI8-R''', а сам файл закодирован в '''UTF-8'''; тогда при его чтении следует воспользоваться функцией '''file()''':&lt;br /&gt;
 &amp;gt; read.table(&lt;br /&gt;
 + file(“mydata-unicode.txt”, encoding=”UTF-8”),&lt;br /&gt;
 +                       sep=”;”, head=TRUE)&lt;br /&gt;
  абв&lt;br /&gt;
 1123&lt;br /&gt;
 2456&lt;br /&gt;
 3789&lt;br /&gt;
&lt;br /&gt;
Иногда нужно, чтобы ''R'' прочитал, кроме имен столбцов, еще и имена&lt;br /&gt;
строк. В этом случае в первой строке должно быть на одну колонку меньше, чем в теле таблицы (в данном примере – три вместо четырех):&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; file.show(“mydata2.txt”)&lt;br /&gt;
 абв&lt;br /&gt;
 раз 1 2 3&lt;br /&gt;
 два 4 5 6&lt;br /&gt;
 три 7 8 9&lt;br /&gt;
 &amp;gt; read.table(“mydata2.txt”, head=TRUE)&lt;br /&gt;
   абв&lt;br /&gt;
 раз 1 2 3&lt;br /&gt;
 два 4 5 6&lt;br /&gt;
 три 7 8 9&lt;br /&gt;
&lt;br /&gt;
* По отечественным правилам, в качестве десятичного разделителя&lt;br /&gt;
нужно использовать запятую, а не точку. Если кто-то при подготовке&lt;br /&gt;
исходных данных этим правилам последовал, то необходимо переопределить аргумент '''dec''':&lt;br /&gt;
&lt;br /&gt;
  &amp;gt; read.table(“mydata3.txt”, dec=”,”, h=T)&lt;br /&gt;
     а б в&lt;br /&gt;
  раз 1.1 2.2 3.3&lt;br /&gt;
  два 4.4 5.0 6.0&lt;br /&gt;
  три 7.0 8.0 9.0&lt;br /&gt;
&lt;br /&gt;
Обратите внимание на сокращенное обозначение аргумента и его&lt;br /&gt;
значения ('''h=T'''). Сокращать можно и нужно, но с осторожностью, поэтому в тексте мы всегда будем использовать '''TRUE/FALSE'''.&lt;br /&gt;
&lt;br /&gt;
В целом, с текстовыми таблицами больших проблем не возникает.&lt;br /&gt;
Разные экзотические текстовые форматы, как правило, можно преобразовать к «типичным» если не с помощью ''R'', то с помощью каких-нибудь многочисленнейших текстовых утилит (вплоть до «тяжеловесов» типа языка ''Perl''). А вот с «посторонними» двоичными форматами&lt;br /&gt;
дело обстоит гораздо хуже. Здесь, прежде всего, возникают проблемы,&lt;br /&gt;
связанные с полностью закрытыми форматами, например, такими,&lt;br /&gt;
как формат популярной в определенных кругах электронной таблицы&lt;br /&gt;
''Microsoft Excel''. Вообще говоря, ответ на вопрос: «Как прочитать двоичный формат в ''R''?» часто сводится к совету по образцу известного анекдота: «выключим газ, выльем воду и вернемся к условию предыдущей задачи». То есть надо найти способ, как преобразовать двоичные данные в обычные текстовые таблицы. Проблем на этом пути возникает обычно не слишком много, но уж больно они разнообразные.&lt;br /&gt;
&lt;br /&gt;
Второй путь – это найти способ прочитать данные в ''R'' без преобразования. Специально для этих целей в ''R'' есть пакет ''foreign'', который&lt;br /&gt;
может читать двоичные данные, выводимые пакетами ''Minitab, S, SAS, SPSS, Stata, Systat'', а также формат '''DBF'''. Чтобы узнать подробнее об&lt;br /&gt;
определенных в этом пакете командах, надо загрузить пакет и вызвать общую справку:&lt;br /&gt;
&lt;br /&gt;
  &amp;gt; library(foreign)&lt;br /&gt;
  &amp;gt; help(package=foreign)&lt;br /&gt;
&lt;br /&gt;
Что же касается пресловутого формата ''Excel'', то здесь дело обстоит&lt;br /&gt;
хуже. Существует не меньше пяти разных способов загрузить эти файлы в ''R'', но все они имеют ограничения. К тому же новый формат ''MS Excel 2007'' пока вообще не поддерживается. Из всех способов наиболее привлекательным представляется обмен с ''R'' через буфер. Если&lt;br /&gt;
открыть в ''OpenOffice Calc'' '''XLS'''-файл, то можно скопировать в буфер&lt;br /&gt;
обмена любое количество ячеек, а потом загрузить их в ''R'':&lt;br /&gt;
&lt;br /&gt;
  &amp;gt; read.table(“clipboard”)&lt;br /&gt;
&lt;br /&gt;
Это очень просто, и главное, работает с любой ''Excel''-подобной программой.&lt;br /&gt;
&lt;br /&gt;
Тут следует отметить еще одну вещь: '''ни в коем случае не рекомендуется производить какой-либо статистический анализ в программах&lt;br /&gt;
электронных таблиц'''. Не говоря уже о том, что Интернет просто забит&lt;br /&gt;
статьями об ошибках в этих программах и/или в их статистических модулях, это еще и крайне неверно идеологически. Иначе говоря: '''Use ''R''!'''&lt;br /&gt;
&lt;br /&gt;
Добавим еще несколько деталей:&lt;br /&gt;
* ''R'' может загружать изображения. Для этого есть сразу несколько пакетов. Наиболее продвинутый из них – ''pixmap''. ''R'' также может загружать карты в формате ''ArcInfo'' и др. (пакеты ''maps, maptools'') и много чего еще.&lt;br /&gt;
* У ''R'' есть собственный двоичный формат. Он быстро записывается и быстро загружается, но его нельзя использовать с другими программами:&lt;br /&gt;
  &amp;gt; x &amp;lt;- “яблоко”&lt;br /&gt;
  &amp;gt; save(x, file=”x.rd”)&lt;br /&gt;
 &amp;gt; rm(x)&lt;br /&gt;
 &amp;gt;x&lt;br /&gt;
 Ошибка: объект “x” не найден&lt;br /&gt;
 &amp;gt; dir()&lt;br /&gt;
 [1] “x.rd”&lt;br /&gt;
 &amp;gt; load(“x.rd”)&lt;br /&gt;
 &amp;gt;x&lt;br /&gt;
 [1] “яблоко”&lt;br /&gt;
&lt;br /&gt;
Для сохранения и загрузки двоичных файлов служат команды '''save()''' и '''load()''', для создания объекта – '''&amp;lt;-''', а для удаления – '''rm()'''.&lt;br /&gt;
* Для ''R'' написано множество интерфейсов к базам данных, в частности, для ''MySQL, PostgresSQL'' и ''SQLite'' (последний может вызываться прямо из ''R'', см. пакеты ''RSQLite'' и ''sqldf'').&lt;br /&gt;
* Наконец, ''R'' сам может записывать таблицы и другие результаты обработки данных, и, разумеется, графики. Об этом мы и поговорим ниже.&lt;br /&gt;
&lt;br /&gt;
===Графики===&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Содержание=[[Изображение:LXF102_91_1.jpg|Рис.1|300px]]Рис. 1. Окна X11 с простейшим графиком.|Ширина=300px}}&lt;br /&gt;
&lt;br /&gt;
Несмотря на то, что «настоящие» статистики часто относятся к графикам почти с презрением, для «широких масс» одним из основных&lt;br /&gt;
достоинств ''R'' служит именно удивительное разнообразие типов графиков, которые он умеет строить. ''R'' в этом смысле – один из рекордсменов. В базовом наборе есть несколько десятков типов графиков,&lt;br /&gt;
еще больше в рекомендуемом пакете ''lattice'', и, естественно, намного&lt;br /&gt;
больше в пакетах с ''CRAN''. По оценочным прикидкам получается, что&lt;br /&gt;
разнообразных типов графиков в ''R'' никак не меньше тысячи. При&lt;br /&gt;
этом они еще и достаточно хорошо настраиваются, то есть пользователь при желании может легко разнообразить эту исходную тысячу на&lt;br /&gt;
свой вкус.&lt;br /&gt;
&lt;br /&gt;
===Два типа графических команд===&lt;br /&gt;
&lt;br /&gt;
Для правильного отображения кириллицы в ''X''-окне (если это действительно необходимо) следует правильно указать шрифты, например,&lt;br /&gt;
так:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; X11(fonts = c(&lt;br /&gt;
 + “-rfx-helvetica-%s-%s-*-*-%d-*-*-*-*-*-koi8-r”,&lt;br /&gt;
 + “-adobe-symbol-medium-r-*-*-%d-*-*-*-*-*-*-*”))&lt;br /&gt;
&lt;br /&gt;
Опция '''fonts''' команды ''X11'' принимает вектор из двух элементов,&lt;br /&gt;
формируемый командой '''c()'''. Первый соответствует шрифту, используемому для обычных текстовых меток, а второй предназначен для&lt;br /&gt;
отображения стандартных спецсимволов, например, греческого алфавита. С помощью программы ''xfontsel'' можно подобрать себе шрифт по&lt;br /&gt;
вкусу. Подробности в ищите разделе '''Fonts''' в документации, выдаваемой по '''help(X11)'''.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; plot(1:20, main=”Заголовок”)&lt;br /&gt;
 legend(“topleft”, pch=1, legend=”Мои точки”)&lt;br /&gt;
&lt;br /&gt;
Тут много такого, о чем пока речи не шло. Но самое главное – то,&lt;br /&gt;
что первая команда рисует график «с нуля», тогда как вторая только&lt;br /&gt;
добавляет к уже нарисованному графику детали. Это и есть два типа&lt;br /&gt;
графических команд, используемых в базовом графическом наборе&lt;br /&gt;
''R''. Теперь немного подробнее: '''plot()''' – основная графическая команда,&lt;br /&gt;
причем команда «умная» (правильнее сказать «generic», или общая).&lt;br /&gt;
Это значит, что она распознает тип объекта, который подлежит рисованию, и строит график в соответствии с ним. Например, в приведенном примере 1:20 – это последовательность чисел от 1 до 20, то есть&lt;br /&gt;
вектор, а для одиночного вектора предусмотрен график, где по оси&lt;br /&gt;
абсцисс расположены индексы (номера каждого элемента вектора по&lt;br /&gt;
порядку), а по оси ординат – сами элементы. Если в аргументе команды будет что-то другое, то будет построен иной график, более подходящий для этого объекта. Вот пример:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; plot(cars)&lt;br /&gt;
 &amp;gt; title(main=”Автомобили 20-х годов”)&lt;br /&gt;
&lt;br /&gt;
Здесь тоже использованы команды обоих типов, но оформлены&lt;br /&gt;
они немного иначе. Не беда, что мы забыли дать заголовок в команде '''plot()''', так как его всегда можно добавить потом, командой '''title()'''.&lt;br /&gt;
«'''cars'''» – это встроенная в ''R'' таблица данных (подробности – в выводе&lt;br /&gt;
команды '''?cars'''), которая использована здесь по прямому назначению,&lt;br /&gt;
то есть для демонстрации возможностей программы. Для нас сейчас&lt;br /&gt;
важно, что это не вектор, а таблица из двух колонок: '''speed''' и '''distance'''&lt;br /&gt;
(скорость и тормозной путь). Функция '''plot()''' автоматически нарисовала так называемый '''scatterplot''', когда по оси X откладывается значение&lt;br /&gt;
одной переменной (колонки), а по оси Y – другой, и еще присвоила&lt;br /&gt;
осям имена этих колонок. Любопытным советуем проверить, что нарисует '''plot()''', если ему «подсунуть» таблицу с тремя колонками, скажем,&lt;br /&gt;
встроенную таблицу «'''trees'''». Кстати говоря, узнать, какие еще есть&lt;br /&gt;
встроенные таблицы, можно с помощью команды '''data()''' (именно так,&lt;br /&gt;
без аргументов).&lt;br /&gt;
&lt;br /&gt;
===Графические устройства===&lt;br /&gt;
&lt;br /&gt;
Встретив команду '''plot()''', ''R'' открывает так называемое экранное графическое устройство (в случае ''X Window'' это стандартное окно X11) и&lt;br /&gt;
начинает вывод на него. Если следующая команда того же типа, то есть&lt;br /&gt;
не добавляющая, то ''R'' «сотрет» старое изображение и начнет выводить&lt;br /&gt;
новое в этом же окне. Если ввести команду:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; dev.off()&lt;br /&gt;
&lt;br /&gt;
то ''R'' закроет графическое окно, что, впрочем, можно сделать, просто&lt;br /&gt;
щелкнув на кнопке в рамке оконного менеджера. Экранных устройств&lt;br /&gt;
в ''R'' предусмотрено несколько – в каждой операционной системе свое&lt;br /&gt;
(а в Mac OS X даже два). Но все это не так важно, пока вы не захотите&lt;br /&gt;
строить графики и сохранять их в виде графических файлов. В этом&lt;br /&gt;
случае придется познакомиться с другими графическими устройствами. Их несколько (количество опять-таки зависит от операционной&lt;br /&gt;
системы), а пакеты предоставляют еще около десятка. Работают они&lt;br /&gt;
примерно так:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; png(file=”1-20.png”, bg=”transparent”)&lt;br /&gt;
 &amp;gt; plot(1:20)&lt;br /&gt;
 &amp;gt; dev.off()&lt;br /&gt;
&lt;br /&gt;
Команда '''png()''' открывает одноименное графическое устройство,&lt;br /&gt;
причем задается параметр, включающий прозрачность базового фона&lt;br /&gt;
(удобно, например, для Web). Такого параметра у экранных устройств&lt;br /&gt;
нет. Как только вводится команда '''dev.off()''', устройство закрывается, и на&lt;br /&gt;
диске появляется файл '''1-20.png'''. '''png()''' – одно из самых распространенных устройств при записи файлов. Недостатком его является, разумеется, растровая природа формата. Аналогичным по своей функциональности является и устройство '''jpeg()''', которое производит '''JPEG'''-файлы.&lt;br /&gt;
&lt;br /&gt;
''R'' поддерживает и векторные форматы, например, '''PDF'''. Здесь, однако, могут возникнуть специфические для русскоязычного пользователя&lt;br /&gt;
трудности со шрифтами. Остановимся на них чуть подробнее. Вот как надо «правильно» создавать '''PDF'''-файл, содержащий русский текст:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; pdf(“1-20.pdf”, family=”NimbusSan”, encoding=”KOI8-R.enc”)&lt;br /&gt;
 &amp;gt; plot(1:20, main=”Заголовок”)&lt;br /&gt;
 &amp;gt; dev.off()&lt;br /&gt;
 &amp;gt; embedFonts(“1-20.pdf”)&lt;br /&gt;
&lt;br /&gt;
Как видно, требуется указать, какой шрифт мы будем использовать, а также кодировку, с которой мы работаем. Помимо '''KOI8-R''', из&lt;br /&gt;
восьмибитных кириллических кодировок доступны '''CP-1251''' и '''KOI8-U'''.&lt;br /&gt;
Затем нужно закрыть графическое устройство и встроить в полученный&lt;br /&gt;
файл шрифты с помощью команды '''embedFonts()'''. Следует отметить,&lt;br /&gt;
что шрифт '''NimbusSan''' и возможность встраивания шрифтов командой обеспечивается взаимодействием ''R'' со сторонней программой&lt;br /&gt;
''Ghostscript'', в поставку которой входят шрифты, содержащие русские&lt;br /&gt;
буквы. Кроме '''PDF''', ''R'' «знает» и другие векторные форматы, например,&lt;br /&gt;
'''PostScript, xfig''' и '''picTeX'''. Есть отдельный пакет ''RSvgDevice'', который поддерживает популярный векторный формат '''SVG'''. График в этом формате можно, например, открыть и видоизменить в свободном векторном редакторе ''Inkscape''.&lt;br /&gt;
&lt;br /&gt;
===Графические опции===&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Содержание=[[Изображение:LXF102_92_1.jpg|Рис.2|300px]]Рис. 2. Две гистограммы друг под другом.|Ширина=300px}}&lt;br /&gt;
&lt;br /&gt;
Как уже говорилось, графика в R настраивается в очень широких пределах. Один из способов настройки – это видоизменение графических&lt;br /&gt;
опций, встроенных в ''R''. Вот, к примеру, распространенная задача: нарисовать две гистограммы одну под другой на одном рисунке. Чтобы это&lt;br /&gt;
сделать, надо изменить исходные опции – а именно, разделить пространство рисунка на две части, примерно так:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; # Создается eps-файл размером 6 на 6 дюймов&lt;br /&gt;
 &amp;gt; postscript(“2hist.eps”,width=6.0,height=6.0,&lt;br /&gt;
 + horizontal=FALSE,onefile=FALSE,paper=”special”)&lt;br /&gt;
 &amp;gt; # Изменяется одно из значений по умолчанию&lt;br /&gt;
 &amp;gt; old.par &amp;lt;- par(mfrow=c(2,1))&lt;br /&gt;
 &amp;gt; hist(cars$speed)&lt;br /&gt;
 &amp;gt; hist(cars$dist)&lt;br /&gt;
 &amp;gt; # Восстанавливаем старое значение по умолчанию&lt;br /&gt;
 &amp;gt; par(old.par)&lt;br /&gt;
 &amp;gt; dev.off()&lt;br /&gt;
&lt;br /&gt;
Ключевая команда здесь '''par()''' – изменяется один из ее параметров,&lt;br /&gt;
'''mfrow''', который регулирует, сколько изображений и как будет размещено на «листе». Значение '''mfrow''' по умолчанию – '''c(1,1)''', то есть один&lt;br /&gt;
график по вертикали и один по горизонтали. Чтобы не печатать каждый раз команду '''par()''' без аргументов (для выяснения «умалчиваемых»&lt;br /&gt;
значений каждого из 71 параметра), мы «запомнили» старое значение&lt;br /&gt;
в объекте '''old.par''', а в конце вернули состояние к сохраненному. То, что&lt;br /&gt;
команда '''hist()''' строит гистограмму, очевидно из названия.&lt;br /&gt;
&lt;br /&gt;
===Идеологически верная графика===&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Содержание=[[Изображение:LXF102_93_1.jpg|Рис.3|300px]]Рис. 3. Точечная диаграмма.|Ширина=300px}}&lt;br /&gt;
&lt;br /&gt;
При всем своем разнообразии, графическая система в ''R'' построена&lt;br /&gt;
на основе строгих правил. Выбор типа графика, основных цветов и&lt;br /&gt;
символов для изображения точек, расположение подписей и т.д. были&lt;br /&gt;
тщательно продуманы создателями. Одним из ключевых для ''R'' исследований является книга Уильяма Кливленда «''Элементы графической обработки данных''». Многие его идеи были осуществлены именно в ''S-PLUS'', а затем и в ''R''. Например, Кливленд нашел, что традиционные&lt;br /&gt;
«столбчатые» графики очень плохо воспринимаются, особенно когда&lt;br /&gt;
речь идет о близких значениях данных, и предложил им на замену&lt;br /&gt;
«точечные диаграммы». Вот так они реализованы в ''R'':&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; dotchart(Titanic[,,”Adult”,”No”],&lt;br /&gt;
 +                 main=’Погибшие на “Титанике”’)&lt;br /&gt;
&lt;br /&gt;
Встроенная таблица данных '''Titanic''' – это четырехмерная матрица,&lt;br /&gt;
которая отражает статистику по возрастным группам, типу билета и полу.&lt;br /&gt;
&lt;br /&gt;
Особенно активно Кливленд (и не только он) возражал против&lt;br /&gt;
использования трехмерных графиков и так называемых «пирогов».&lt;br /&gt;
Поначалу «пирожных» графиков в R вовсе не было, причем по принципиальным соображениям. Сегодня они есть, но если вы откроете страницу помощи, то узнаете, что «Pie charts are a very bad way of displaying&lt;br /&gt;
information». Трехмерных графиков в ''R'' и сейчас немного (правда, есть&lt;br /&gt;
особый пакет ''rgl'', позволяющий строить такие графики через ''OpenGL''),&lt;br /&gt;
а если вы хотите узнать, как меняется поведение двух переменных по&lt;br /&gt;
отношению к третьей, предлагаются так называемые «Trellis graphs»&lt;br /&gt;
или графики-решетки:&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Содержание=[[Изображение:LXF102_93_2.jpg|Рис.4|300px]]Рис. 4. График-решетка.|Ширина=300px}}&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; coplot(log(Volume) ~ log(Girth) | Height, data = trees)&lt;br /&gt;
&lt;br /&gt;
При выполнении этой команды на рисунке отображается, как зависит объем древесины от объема кроны (в логарифмической шкале)&lt;br /&gt;
у деревьев различной высоты. Действительно, такое представление&lt;br /&gt;
гораздо эффективнее трехмерного. Странно, что распространенные&lt;br /&gt;
пакеты статобработки почти не используют графики-решетки, хотя их&lt;br /&gt;
наличие неоднократно называлось одной из главных причин коммерческого успеха ''S-PLUS''.&lt;br /&gt;
&lt;br /&gt;
===Интерактивность===&lt;br /&gt;
&lt;br /&gt;
Интерактивная графика позволяет выяснить, где именно на графике&lt;br /&gt;
расположены нужные вам точки, и поместить объект (скажем, подпись) в нужное место, а также проследить «судьбу» одних и тех же&lt;br /&gt;
точек на разных графиках. Кроме того, если данные многомерные, то&lt;br /&gt;
можно вращать облако точек в плоскости разных переменных, чтобы&lt;br /&gt;
выяснить структуру данных.&lt;br /&gt;
&lt;br /&gt;
Еще несколько лет назад пришлось бы написать, что здесь вместо&lt;br /&gt;
''R'' следует воспользоваться другими аналитическими инструментами,&lt;br /&gt;
но ''R'' развивается так быстро, что все эти методы теперь доступны, причем в нескольких вариантах. Например, так можно добавлять подписи&lt;br /&gt;
в указанную мышью область графика:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; plot(1:20)&lt;br /&gt;
 &amp;gt; text(locator(), “Моя любимая точка”, pos=4)&lt;br /&gt;
&lt;br /&gt;
После того как введена вторая команда, надо щелкнуть левой кнопкой мыши на выбранной точке в графике, а затем – неважно, где – щелкнуть правой кнопкой мыши.&lt;br /&gt;
&lt;br /&gt;
Интерактивная графика других типов реализована командой&lt;br /&gt;
'''identify()''', а также пакетами ''rggobi, TeachingDemos'' и ''iplot''.&lt;br /&gt;
&lt;br /&gt;
===Как сохранять результаты===&lt;br /&gt;
&lt;br /&gt;
Начинающие работу с ''R'' обычно просто копируют результаты работы&lt;br /&gt;
(скажем, данные тестов) из консоли ''R'' в текстовый файл. И действительно, на первых порах этого может оказаться достаточно. Однако рано или&lt;br /&gt;
поздно возникает необходимость сохранять созданные объемные объекты (например, таблицы данных). Можно использовать уже упомянутый&lt;br /&gt;
в начале статьи внутренний двоичный формат, но это не всегда удобно.&lt;br /&gt;
Лучше всего сохранять таблицы данных в виде текстовых таблиц, которые потом можно будет открывать другими приложениями или текстовыми редакторами. Для этого служит команда '''write.table()''':&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; write.table(file=”trees.csv”, trees,&lt;br /&gt;
 +            row.names=F, sep=”;”, quote=F)&lt;br /&gt;
&lt;br /&gt;
В текущую рабочую директорию будет записан файл '''trees.csv''',&lt;br /&gt;
образованный из встроенной в ''R'' таблицы данных '''trees'''. А что, если&lt;br /&gt;
надо записать во внешний файл результаты выполнения команд? В этом случае используется команда '''sink()''':&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; sink(“1.txt”, split=T)&lt;br /&gt;
 &amp;gt; 2+2&lt;br /&gt;
 [1] 4&lt;br /&gt;
 &amp;gt; sink()&lt;br /&gt;
&lt;br /&gt;
При этом во внешний файл запишется строчка “'''[1] 4'''”, то есть&lt;br /&gt;
результат выполнения команды. Сама команда записана не будет, а если&lt;br /&gt;
хочется, чтобы она была записана, то придется ввести что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; print(“2+2”)&lt;br /&gt;
 [1] “2+2”&lt;br /&gt;
 &amp;gt; 2+2&lt;br /&gt;
 [1] 4&lt;br /&gt;
&lt;br /&gt;
то есть повторять каждую команду два раза. Для сохранения истории&lt;br /&gt;
команд служит команда '''savehistory()''', а для сохранения всех созданных&lt;br /&gt;
объектов – '''save.image()'''. Последняя может оказаться также полезной&lt;br /&gt;
для сохранения промежуточных результатов, если вы не уверены в&lt;br /&gt;
стабильности работы компьютера.&lt;br /&gt;
&lt;br /&gt;
===Мастера отчетов===&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Содержание=[[Изображение:LXF102_94_1.jpg|Рис.5|300px]]Рис. 5. Пример отчета, полученного с помощью команды Sweave.|Ширина=300px}}&lt;br /&gt;
&lt;br /&gt;
Таблицы, созданные в ''R'', можно сохранять и в более «приличном»&lt;br /&gt;
виде: например, в форматах ''LaTeX'' или ''HTML'', при помощи пакета&lt;br /&gt;
''xtable''. Естественно, хочется пойти дальше, и сохранять в каком-нибудь&lt;br /&gt;
из этих форматов вообще всю ''R''-сессию. Для ''HTML'' такое возможно,&lt;br /&gt;
если использовать пакет ''R2HTML'' с '''CRAN''':&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; library(R2HTML)&lt;br /&gt;
 &amp;gt; dir.create(“example”)&lt;br /&gt;
 &amp;gt; HTMLStart(“example”)&lt;br /&gt;
 HTML&amp;gt; 2+2&lt;br /&gt;
 HTML&amp;gt; plot(1:20)&lt;br /&gt;
 HTML&amp;gt; HTMLplot()&lt;br /&gt;
 HTML&amp;gt; HTMLStop()&lt;br /&gt;
&lt;br /&gt;
В рабочей директории будет создана поддиректория '''example''', и&lt;br /&gt;
туда будут записаны ''HTML''-файлы, содержащие полный отчет о текущей сессии, в том числе и созданный график.&lt;br /&gt;
&lt;br /&gt;
Можно пойти и еще дальше. Что если создать файл, который&lt;br /&gt;
будет содержать код ''R'', перемешанный с текстовыми комментариями, и потом «скормить» этот файл ''R'' так, чтобы фрагменты&lt;br /&gt;
кода заменились на результат их исполнения? Идея эта называется&lt;br /&gt;
«literate programming» (грамотное программирование) и принадлежит&lt;br /&gt;
Дональду Кнуту, создателю ''TeX''. В случае ''R'' такая система используется для автоматической генерации отчетов – функции, которая фактически отсутствует в остальных статистических пакетах и делает ''R'' поистине незаменимым. Для создания подобного отчета, для начала&lt;br /&gt;
надо набрать простой файл c ''LaTeX''-подобной структурой и назвать его,&lt;br /&gt;
например, '''test-Sweave.Rnw''':&lt;br /&gt;
&lt;br /&gt;
 \documentclass[a4paper,12pt]{scrartcl}&lt;br /&gt;
 % Стандартная шапка для LaTeX-документа&lt;br /&gt;
 \usepackage[T2A]{fontenc}&lt;br /&gt;
 % В зависимости от используемой локали вместо koi8-r нужно&lt;br /&gt;
 %поставить cp1251 или utf8&lt;br /&gt;
 \usepackage[koi8-r]{inputenc}&lt;br /&gt;
 \usepackage[english,russian]{babel}&lt;br /&gt;
 \usepackage{indentfirst}&lt;br /&gt;
 \title{Тест Sweave}&lt;br /&gt;
 \author{А.В.\,Тор}&lt;br /&gt;
 \begin{document} % Тело документа&lt;br /&gt;
 \maketitle&lt;br /&gt;
 \textsf{R} как калькулятор:&lt;br /&gt;
 &amp;lt;&amp;lt;echo=TRUE,print=TRUE&amp;gt;&amp;gt;=&lt;br /&gt;
 1+1&lt;br /&gt;
 1 + pi&lt;br /&gt;
 sin(pi/2)&lt;br /&gt;
 @&lt;br /&gt;
 Картинка:&lt;br /&gt;
 &amp;lt;&amp;lt;fig=TRUE&amp;gt;&amp;gt;=&lt;br /&gt;
 plot(1:20)&lt;br /&gt;
 @&lt;br /&gt;
 \end{document}&lt;br /&gt;
      Затем этот файл необходимо обработать в R:&lt;br /&gt;
  &amp;gt; Sweave(“test-Sweave.Rnw”)&lt;br /&gt;
  Writing to file test-Sweave.tex&lt;br /&gt;
  Processing code chunks ...&lt;br /&gt;
   1 : echo print term verbatim&lt;br /&gt;
   2 : echo term verbatim eps pdf&lt;br /&gt;
  You can now run LaTeX on ‘test-Sweave.tex’&lt;br /&gt;
&lt;br /&gt;
При этом создается готовый ''LaTeX''-файл '''test-Sweave.tex'''. И, наконец, при помощи ''latex/dvips'' или ''pdflatex'' получить результирующий&lt;br /&gt;
файл:&lt;br /&gt;
&lt;br /&gt;
  =&amp;gt; latex test-Sweave.tex&lt;br /&gt;
  =&amp;gt; dvips test-Sweave.dvi&lt;br /&gt;
  =&amp;gt; gv test-Sweave.ps&lt;br /&gt;
  # или&lt;br /&gt;
  =&amp;gt; pdflatex test-Sweave.tex&lt;br /&gt;
  =&amp;gt; acroread test-Sweave.pdf&lt;br /&gt;
&lt;br /&gt;
Такой отчет можно расширять, шлифовать, изменять исходные&lt;br /&gt;
данные, и при этом усилия по оформлению практически сводятся на&lt;br /&gt;
нет. Если есть желание, чтобы код ''R'' набирался моноширинным шрифтом, то в ''LaTeX''-преамбуле ''RNW''-файла следует добавить строчку:&lt;br /&gt;
&lt;br /&gt;
  \usepackage[noae]{Sweave}&lt;br /&gt;
&lt;br /&gt;
Исходный код и авторскую документацию профессора Фридриха Лайша (Friedrich Leisch) можно найти здесь: http://www.ci.tuwien.ac.at/~leisch/Sweave/.&lt;br /&gt;
&lt;br /&gt;
Помимо ''Sweave'', есть и другие системы генерации отчетов: например, уже упомянутый пакет ''R2HTML'' умеет производить похожие&lt;br /&gt;
отчеты в '''HTML'''. Есть пакет ''brew'', который позволяет создавать автоматические отчеты в текстовой форме (разумеется, без графиков), и&lt;br /&gt;
совсем новый пакет ''odfWeave'', который может работать с '''ODF''' (формат ''OpenOffice.org''). '''LXF'''&lt;/div&gt;</summary>
		<author><name>Crazy Rebel</name></author>	</entry>

	</feed>