R Programming week1-Reading Data

Reading Data

There are a few principal functions reading data into R.

read.table, read.csv, for reading tabular data

readLines, for reading lines of a text file

source, for reading in R code files (inverse of dump)

dget, for reading in R code files (inverse of dput)

load, for reading in saved workspaces

unserialize, for reading single R objects in binary form

Writing Data

There are analogous functions for writing data to files

write.table

writeLines

dump

dput

save

serialize

Reading Data Files with read.table

The read.table function is one of the most commonly used functions for reading data. It has a few important arguments:

file, the name of a file, or a connection

header, logical indicating if the file has a header line

sep, a string indicating how the columns are separated

colClasses, a character vector indicating the class of each column in the dataset

nrows, the number of rows in the dataset

comment.char, a character string indicating the comment character s

kip, the number of lines to skip from the beginning

stringsAsFactors, should character variables be coded as factors?

read.table

For small to moderately sized datasets, you can usually call read.table without specifying any other arguments

data <- read.table("foo.txt")

R will automatically

skip lines that begin with a #

figure out how many rows there are (and how much memory needs to be allocated)

figure what type of variable is in each column of the table Telling R all these things directly makes R run faster and more efficiently.

read.csv is identical to read.table except that the default separator is a comma.

Reading in Larger Datasets with read.table

With much larger datasets, doing the following things will make your life easier and will prevent R from choking.

Read the help page for read.table, which contains many hints

Make a rough calculation of the memory required to store your dataset. If the dataset is larger than the amount of RAM on your computer, you can probably stop right here.

Set comment.char = "" if there are no commented lines in your file.

Use the colClasses argument. Specifying this option instead of using the default can make ’read.table’ run MUCH faster, often twice as fast. In order to use this option, you have to know the class of each column in your data frame. If all of the columns are “numeric”, for example, then you can just set colClasses = "numeric". A quick an dirty way to figure out the classes of each column is the following:

initial <- read.table("datatable.txt", nrows = 100)

classes <- sapply(initial, class)

tabAll <- read.table("datatable.txt", colClasses = classes)

Set nrows. This doesn’t make R run faster but it helps with memory usage. A mild overestimate is okay. You can use the Unix tool wc to calculate the number of lines in a file.

Know Thy System

In general, when using R with larger datasets, it’s useful to know a few things about your system.

How much memory is available?

What other applications are in use?

Are there other users logged into the same system?

What operating system? Is the OS 32 or 64 bit?

Calculating Memory Requirements

Calculating Memory Requirements I have a data frame with 1,500,000 rows and 120 columns, all of which are numeric data. Roughly, how much memory is required to store this data frame? 1,500,000 × 120 × 8 bytes/numeric = 1440000000 bytes = 1440000000 / bytes/MB = 1,373.29 MB = 1.34 GB

Textual Formats

dumping and dputing are useful because the resulting textual format is edit-able, and in the case of corruption, potentially recoverable.

Unlike writing out a table or csv file, dump and dput preserve the metadata (sacrificing some readability), so that another user doesn’t have to specify it all over again.

Textual formats can work much better with version control programs like subversion or git which can only track changes meaningfully in text files

Textual formats can be longer-lived; if there is corruption somewhere in the file, it can be easier to fix the problem

Textual formats adhere to the “Unix philosophy”

Downside: The format is not very space-efficient

dput-ting R Objects

Another way to pass data around is by deparsing the R object with dput and reading it back in using dget.

> y <- data.frame(a = 1, b = "a")

> dput(y) structure(list(a = 1, b = structure(1L, .Label = "a", class = "factor")), .Names = c("a", "b"), row.names = c(NA, -1L), class = "data.frame")

> dput(y, file = "y.R")

> new.y <- dget("y.R")

> new.y

 a b

1 1 a

Dumping R Objects

Multiple objects can be deparsed using the dump function and read back in using source

> x <- "foo"

> y <- data.frame(a = 1, b = "a")

> dump(c("x", "y"), file = "data.R")

> rm(x, y)

> source("data.R")

 > y

 a b

 1 1 a

> x

[1] "foo"

Interfaces to the Outside World

Data are read in using connection interfaces. Connections can be made to files (most common) or to other more exotic things.

file, opens a connection to a file

gzfile, opens a connection to a file compressed with gzip

bzfile, opens a connection to a file compressed with bzip2

url, opens a connection to a webpage

File Connections

> str(file) function (description = "", open = "", blocking = TRUE, encoding = getOption("encoding"))

description is the name of the file

open is a code indicating

“r” read only

“w” writing (and initializing a new file)

“a” appending

“rb”, “wb”, “ab” reading, writing, or appending in binary mode (Windows)

Connections

In general, connections are powerful tools that let you navigate files or other external objects. In practice, we often don’t need to deal with the connection interface directly.

con <- file("foo.txt", "r")

data <- read.csv(con)

close(con)

is the same as

data <- read.csv("foo.txt")

时间: 2024-11-03 05:42:34

R Programming week1-Reading Data的相关文章

Coursera系列-R Programming第三周-词法作用域

完成R Programming第三周 这周作业有点绕,更多地是通过一个缓存逆矩阵的案例,向我们示范[词法作用域 Lexical Scopping]的功效.但是作业里给出的函数有点绕口,花费了我们蛮多心思. Lexical Scopping: The value of free variables are searched for in the environment where the function was defined. 因此 make.power<-function(n){ pow<

SQL data reader reading data performance test

/*Author: Jiangong SUN*/ As I've manipulated a lot of data using SQL data reader in recent project. And people says it's not good to access the data by column name. So I've made an performance test in reading data from SQL data reader. Firstly, I've

将R非时间序列的data.frame转变为时序格式

将R非时间序列的data.frame转变为时序格式,常常会用到,尤其是股票数据处理中, 举例:dailyData包括两列数据:Date Close10/11/2013 871.9910/10/2013 868.2410/9/2013 855.8610/8/2013 853.6710/7/2013 865.7410/4/2013 872.3510/3/2013 876.0910/2/2013 887.9910/1/2013 8879/30/2013 875.919/27/2013 876.399/

mysql从库Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: &#39;Could not find first log file name in binary log index file&#39;报错处理

年后回来查看mysql运行状况与备份情况,登录mysql从库查看主从同步状态 1 mysql> show slave status\G; 2 *************************** 1. row *************************** 3 Slave_IO_State: 4 Master_Host: 101.200.*.* 5 Master_User: backup 6 Master_Port: 3306 7 Connect_Retry: 60 8 Master_

OpenTSDB-Querying or Reading Data

Querying or Reading Data OpenTSDB offers a number of means to extract data such as CLI tools, an HTTP API and as a GnuPlot graph. Querying with OpenTSDB's tag based system can be a bit tricky so read through this document and checkout the following p

Got fatal error 1236 from master when reading data from binary log: &#39;Could not find first log file name in binary log index file&#39;系列一:

主库添加log-bin-index 参数后,从库报这个错误:Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file' Got fatal error 1236 from master when reading data from binary log: 'could not find next l

Got fatal error 1236 from master when reading data from binary log: &#39;Could not find first log file name in binary log index file&#39;系列二:reset slave

reset slave会清除从库的所有复制信息.一般应用场景:如切换为不同的Master, 主从重做等: 1. 命令在slave上执行,执行前一定要stop slave. 2. 执行reset slave后,会清除复制相关的所有信息,包括:master.info, relay-log.info, 及无条件删除所有的中继日志(relay logs). 注意是无条件的,也就是不管理你Slave SQL线程是否把所有的relay log重放完了. 3. 注意,stop slave后,先保存show s

mysql 主从 Got fatal error 1236 from master when reading data from binary log: &#39;Could not find first 错误

本地MySQL环境,是两台MySQL做M-M复制.今天发现错误信息: mysql 5.5.28-log> show slave status\G *************************** 1. row ***************************                Slave_IO_State:                   Master_Host: 88.88.88.88                   Master_User: replicate

Got fatal error 1236 from master when reading data from binary log: &#39;Client requested master to start replication from impossible position&#39;

[[email protected] bin]# mysqlbinlog logbin.000002 /*!40019 SET @@session.max_insert_delayed_threads=0*/; /*!50003 SET @[email protected]@COMPLETION_TYPE,COMPLETION_TYPE=0*/; DELIMITER /*!*/; # at 4 #150511 20:57:36 server id 1 end_log_pos 106 Start: