Язык r read table

Введение в R: часть 2

Pavel Polishchuk, 2014

Содержание

Чтение/запись файлов в R

Чтение текстовых файлов

При написании команд и функций удобно пользоваться возможность автодополнения. Для этого наберите часть команды, или имени функции или параметра и нажмите сочетание клавиш Ctrl+Пробел. В выпадающем списке можно выбрать подходящую команду.

При написании путей к папкам и файлам можно использовать либо абсолютный либо относительный путь. Например, предыдущий вызов можно оформить как

Для представления пути используются либо символы слэша (/) либо удвоенные символы обратного слэша (\). Это обусловлено тем, что обратный слэш в R это спецсимвол и добавление второго слэша его экранирует и указываает R, что следующий за ним символ надо вопринимать как обычный.
Т.е. обе эти записи пути эквивалетны: «D:/Teaching/R/introduction/md/data/sol_y1.txt» или «D:\\Teaching\\R\\introduction\\md\\data\\sol_y1.txt»

Посмотрим на данные, которые были загружены. Сделать это можно несколькими способами, вот некоторые из них

Чтение текстовых файлов с использованием функции fread (пакет data.table)

Для просмотра загруженной таблицы в RStudio можно использовать команду

или кликнуть по имени переменной x1 в списке

Результат в обоих случаях будет одинаковым

Проверим объект какого класса получился при загрузке таблицы с использованием функции fread

Приведем объект x1 к типу data.frame

Отметим, что первая колонка содержит названия соединений. Переместим значения этой колонки в поле rownames

Проверим, что получилось.

Сохранение данных в бинарном формате

Таким образом можно сохранить данные из однажды прочитанного текстового файла в бинарном формате и в дальнейшем загружать эти данные из него.

Чтобы сохранить содержимое переменной x1 используем следующий вызов (указание ключевого слова file является обязательным)

Очистка рабочей области от загруженных и используемых переменных

Объекты также можно удалять выборочно, указывая их названия.

Иногда при длительной работе и загрузке удалении больших объемом данных бывает полезно вызывать сборщик мусора, который принудительно очищает память от уже неиспользуемых данных.

Чтение данных в бинарном формате

Загрузим ранее сохраненный файл sol_x1.RData

Как вы могли заметить в списке загруженных переменных появилась новая с именем x1 как у ранее сохраненного data.frame.
Однако если в разных файлах сохранены объекты с одинаковым названием, то для их одновременной загрузки эти объекты необходио переименовать. Это можно во время загрузки данных, использовав следующий набор команд:

Проверим загруженный объект x1.1 на идентичность с x1

Сохранение данных в текстовом формате

Функция write.table сохраняет данные в текстовом формате. Она имеет много параметров для гибкой настройки вида сохраняемого файла.

Другие функции для работы с текстовыми файлами

Существуют различные дополнительные функции для чтения и записи текстовых файлов с определенным стилем форматирования. Подробную информацию о них можно найти в справочной системе R.

Другие способы ввода-вывода

Помимо текстовых и бинарных данных R может читать данные из различных баз данных, а также файлов MS Excel, для чего используется подключение дополнительных пакетов. В частности пакет xlsx позволяет работать с данными, сохраненными в одноименном формате.

Создание пользовательских функций

Если часто используется одна и та же последовательность команд, то целесообразнее создать функцию, которая бы их выполняла автоматически. Это существенно упрощает текст программы, делает его более модульным, читабельным и простым для внесения изменений.

Создадим простейшую функцию рассчитывающую разность двух векторов

Важно отметить, что при передаче параметров в функции, можно не использовать названия параметров только в том случае, если соблюдается порядок следования параметров. В противном случае необходимо указывать названия параметров.

Продемонстрируем области видимости переменных на примере собственных функций.

Таким образом все что передается в функцию попадает в локальную области видимости только этой функции как и все изменения.

Реализуем собственную функцию загрузки бинарных файлов

Ключевое слово return в завершении функции писать не обязательно. По умолчанию функция возвращает результат последней операции.

После чего для загрузки бинарного файла достаточно вызвать

Ранее для чтения текстового файла с дескрипторами мы использовали следующий вызов.

Если часто использовать ее для чтения файлов, то удобнее создать собственную функцию. Создадим два варианта.
Первый вариант

Троеточие используется для передачи дополнительных параметров внутрь функций.

Тогда для загрузки файлов с дескрипторами достаточно вызвать

Какие достоинства и недостатки у каждого из вариантов?

Задания

Манипуляции с данными

Векторы

Загрузим файл sol_y1.RData и определим среднее значение растворимости в выборке, медианное значение, максимальное и минимальное значения.

Все приведенные функции векторизированы, поэтому расчет происходит очень быстро и эффективно.

Функция summary возвращает всю вышеприведенную статистику в виде одного вектора значений.

Помимо этих есть еще множество функций рассчета различных статистических характеристик.

Data.frames

Продемонстрируем работу с data.frames на примере.
Есть два набора соединений с рассчитанными дескрипторами и их необходимо объединить в один data.frame.

Загрузим оба имеющихся файла данных:

Проверим размерность загруженных данных. Функция dim возвращает размерность данных (число строк и число столбцов), другими словами число соединений и число дескрипторов.

Поскольку число дескрипторов отличается, то выясним какие дескрипторы отсутствуют в каждом из наборов данных.

Функция setdiff возвращает элементы первого вектора, которые отсутствуют во втором

Посмотрим сколько таких дескриптров в каждом случае

Проверям размерность полученных данных

Число колонок (дескрипторов) теперь идентично. Проверим порядок следования дескриптров в каждом наборе, используя следующую конструкцию

Аналогично выполняется проверка для второго набора

Две эти проверки можно заменить одной, если предварительно отсортировать имена колонок в обоих наборах почле чего сравнить их

Теперь перед объединением строк обоих data.frames необходимо расположить колонки в одинаковом порядке. Воспользуемся для этого свойством индексов и расположим колонки в x2 в той же последовательности что и в x1

Теперь колонки расположены в одной последовательности. Проверим

Загрузим и объединим значения свойства для двух наборов данных

Посмотрим на распределение значений свойства

Простейшие функции для работы с графикой

Базовый пакет R имеет в своем составе много функций для визуализации данных. Остановимся только на некоторых, которые могут быть полезны при первом знакомстве с данными.

Если стандартное отображение не устраивает, то можно его изменить, например, сделав интервалы меньше.

Для более подробного знакомства с возможностями базовых функций графического отображения рекомендую ознакомиться со следующими источниками:

1, R Base Graphics: An Idiot’s Guide http://rpubs.com/SusanEJohnston/7953
2. Различные примеры работы с графикой (и не только) http://flowingdata.com/category/tutorials/

Семейство функций apply

apply

Решение с использованием цикла for

Решение с использованием функции apply

Правда короче и проще? Кроме того вектор с результатами содержит названия переменных.

А вот выражение, которое вычисляет среднее значение по строкам

Общий вид вызова функции apply

Результатом будет являться вектор (если используемая функция возвращает одно значение), массив (если функция возвращает вектор значений) или список (если функция возвращает результат в виде более сложной структуры данных, например data.frame или матрица).

ВАЖНО! При применении функции apply к data.frame, data.frame неявно приводится к матрице. Матрицы как мы помним содержат данные только одного типа. Это означеат что если в data.frame 9 числовых колонок и 1 текстовая, то будет произведена конвертация в текстовую матрицу, и следовательно все действия будут производиться над текстовой матрицей.
Пример

Предложите альтернативный вариант расчета.

sapply & lapply

Вспомним, что data.frame является списком векторов-столбцов. Тогда предыдущий пример можно переписать как

Использование lapply вернет уже список

Обратите внимание, что в этом случае в качестве первого параметра передается не data.frame, а вектор индексов колонок, по которым происходит итерация.

Функция seq_along возвращает вектор индексов с первого до последнего элемента вектора/списка.

Использование функций семейства apply позволяет делать код более простым и читабельным.

Например, надо определить класс каждой колонки в data.frame

Как видим в отличие от apply фугкция sapply не производит неявной конвертации data.frame в матрицу и типы данных в колонках остаются неизменными.

Задание

Домашнее задание

Создать функцию, которая будет объединять два набора фрагментных дескрипторов.

Источник

read.table

Data Input

Reads a file in table format and creates a data frame from it, with cases corresponding to lines and variables to fields in the file.

Usage
Arguments

Alternatively, file can be a readable text-mode connection (which will be opened for reading if necessary, and if so close d (and hence destroyed) at the end of the function call). (If stdin() is used, the prompts for lines may be somewhat confusing. Terminate input with a blank line or an EOF signal, Ctrl-D on Unix and Ctrl-Z on Windows. Any pushback on stdin() will be cleared before return.)

a logical value indicating whether the file contains the names of the variables as its first line. If missing, the value is determined from the file format: header is set to TRUE if and only if the first row contains one fewer field than the number of columns.

the field separator character. Values on each line of the file are separated by this character. If sep = «» (the default for read.table ) the separator is ‘white space’, that is one or more spaces, tabs, newlines or carriage returns.

the character used in the file for decimal points.

a vector of row names. This can be a vector giving the actual row names, or a single number giving the column of the table which contains the row names, or character string giving the name of the table column containing the row names.

If there is a header and the first row contains one fewer field than the number of columns, the first column in the input is used for the row names. Otherwise if row.names is missing, the rows are numbered.

Using row.names = NULL forces row numbering. Missing or NULL row.names generate row names that are considered to be ‘automatic’ (and not preserved by as.matrix ).

a vector of optional names for the variables. The default is to use «V» followed by the column number.

Note that as.is is specified per column (not per variable) and so includes the column of row names (if any) and any columns to be skipped.

a character vector of strings which are to be interpreted as NA values. Blank fields are also considered to be missing values in logical, integer, numeric and complex fields. Note that the test happens after white space is stripped from the input, so na.strings values may need their own white space stripped in advance.

Note that colClasses is specified per column (not per variable) and so includes the column of row names (if any).

integer: the maximum number of rows to read in. Negative and other invalid values are ignored.

integer: the number of lines of the data file to skip before beginning to read data.

logical. If TRUE then the names of the variables in the data frame are checked to ensure that they are syntactically valid variable names. If necessary they are adjusted (by make.names ) so that they are, and also to ensure that there are no duplicates.

logical. If TRUE then in case the rows have unequal length, blank fields are implicitly added. See ‘Details’.

logical. Used only when sep has been specified, and allows the stripping of leading and trailing white space from unquoted character fields ( numeric fields are always stripped). See scan for further details (including the exact meaning of ‘white space’), remembering that the columns may include the row names.

logical: if TRUE blank lines in the input are ignored.

character: a character vector of length one containing a single character or an empty string. Use «» to turn off the interpretation of comments altogether.

encoding to be assumed for input strings. It is used to mark character strings as known to be in Latin-1 or UTF-8 (see Encoding ): it is not used to re-encode the input, but allows R to handle encoded strings in their native encoding (if one of those two). See ‘Value’ and ‘Note’.

character string: if file is not supplied and this is, then data are read from the value of text via a text connection. Notice that a literal string can be used to include (small) data sets within R code.

logical: should nuls be skipped?

Details

Unless colClasses is specified, all columns are read as character columns and then converted using type.convert to logical, integer, numeric, complex or (depending on as.is ) factor as appropriate. Quotes are (by default) interpreted in all fields, so a column of values like «42» will result in an integer column.

A field or line is ‘blank’ if it contains nothing (except whitespace if no separator is specified) before a comment character or the end of the field or line.

If row.names is not specified and the header line has one less entry than the number of columns, the first column is taken to be the row names. This allows data frames to be read in from the format in which they are printed. If row.names is specified and does not refer to the first column, that column is discarded from such files.

The number of data columns is determined by looking at the first five lines of input (or the whole input if it has less than five lines), or from the length of col.names if it is specified and is longer. This could conceivably be wrong if fill or blank.lines.skip are true, so specify col.names if necessary (as in the ‘Examples’).

The rest of the line after a comment character is skipped; quotes are not processed in comments. Complete comment lines are allowed provided blank.lines.skip = TRUE ; however, comment lines prior to the header must have the comment character in the first non-blank column.

Quoted fields with embedded newlines are supported except after a comment character. Embedded nuls are unsupported: skipping them (with skipNul = TRUE ) may work.

Value

A data frame ( data.frame ) containing a representation of the data in the file.

Empty input is an error unless col.names is specified, when a 0-row data frame is returned: similarly giving just a header line if header = TRUE results in a 0-row data frame. Note that in either case the columns will be logical unless colClasses was supplied.

The columns referred to in as.is and colClasses include the column of row names (if any).

There are two approaches for reading input that is not in the local encoding. If the input is known to be UTF-8 or Latin1, use the encoding argument to declare that. If the input is in some other encoding, then it may be translated on input. The fileEncoding argument achieves this by setting up a connection to do the re-encoding into the current locale. Note that on Windows or other systems not running in a UTF-8 locale, this may not be possible.

Memory usage

These functions can use a surprising amount of memory when reading large files. There is extensive discussion in the ‘R Data Import/Export’ manual, supplementing the notes here.

Less memory will be used if colClasses is specified as one of the six atomic vector classes. This can be particularly so when reading a column that takes many distinct numeric values, as storing each distinct value as a character string can take up to 14 times as much memory as storing it as an integer.

Using comment.char = «» will be appreciably faster than the read.table default.

read.table is not the right tool for reading large matrices, especially those with many columns: it is designed to read data frames which may have columns of very different classes. Use scan instead for matrices.

References

Chambers, J. M. (1992) Data for models. Chapter 3 of Statistical Models in S eds J. M. Chambers and T. J. Hastie, Wadsworth & Brooks/Cole.

Источник

Поделиться с друзьями
admin
Оцените автора
( Пока оценок нет )
Как переводится?
Adblock
detector