一般文件
手动输入数据
如果数据量不大, 可以手动输入数据, 除了通过变量赋值的方法来输入数据外, 还可以通过编辑器或调用的窗口来输入数据.
mydata <- data.frame(age = numeric(0), gender = character(0))
mydata <- edit(mydata) # 使用edit必须要重新赋给变量
fix(mydata) # 使用fix直接修改变量
scan 函数如果不加 file 的参数, 则直接从终端读取数据, 需要使用 what 来指明数据类型: what=""
读字符, what=0
读数字, what=list(a=0, b="")
把读的结果按相应类型保存成 list. scan 函数也可以放在其他的函数中, 如 matrix, 然后在终端输入值.
scan()
mymat <- matrix(scan(),ncol=3,byrow=TRUE)
读取文本文件
mydata <- read.table(file = THEFILE, header = TRUE, sep = ",", stringsAsFactors = FALSE)
除了 read.table 直接把 scan 函数封装好的函数外, 还有 read.csv, read.csv2, read.delim, read.delim2 等对 read.table 进行了按照文件类型进行特别设置的函数可以使用.
- read.csv: 以 "," 分隔的 CSV 文件, 默认第一行为表头, 以 "." 作为小数点.
- read.csv2: 以 ";" 分隔的 CSV 文件, 默认第一行为表头, 以 "," 作为小数点.
- read.delim: 以 "\t" 分隔的 TSV 文件, 默认第一行为表头, 以 "." 作为小数点.
- read.delim2: 以 "\t" 分隔的 TSV 文件, 默认第一行为表头, 以 "," 作为小数点.
- read.fwf: 按照固定长度去读取文件.
读取 Excel 文件
对于 Excel 文件, 可以像连接数据库一样进行连接, 使用 RODBC 包 (限于 Windows).
library(RODBC)
channel <- odbcConnectExcel("myfile.xls")
mydata <- sqlFetch(channel, "mysheet1")
odbcClose(channel)
Excel 2007 采用的 xlsx 文件实际上相当于 xls 的压缩文件. 对于 xlsx 文件, 可以使用 xlsx 包, 来读取和操作 xlsx 文件.
library(xlsx)
mydata <- read.xlsx("myfile.xlsx", 1) # 1 指的是要读取的表单.
也可以在所有的平台上使用 gdata 包的 read.xls 来读取 Excel 文件.
读取关系数据库数据
ODBC 数据库接口
在系统安装有合适的 ODBC 驱动的情况下, 使用 RODBC 包可以连接关系数据库.
odbcConnect(dsn,uid="",pwd="") # 建立一个到ODBC数据库的连接
sqlFetch(channel,sqltable) # 读取ODBC数据库中的某个表到一个数据框中
sqlQuery(channel,query) # 向ODBC数据库提交一个查询并返回结果
sqlSave(channel,mydf,tablename=sqtable,append=FALSE) # 将数据框写入或更新(append=TRUE)到ODBC数据库的
某个表中
sqlDrop(channel,sqtable) # 删除ODBC数据库中的某个表
close(channel) # 关闭连接
DBI 数据库接口
DBI 提供数据库通用接口. 相关 R 包有 RJDBC, RMySQL, RPostgreSQL, ROracle, RSQLite 等.
链接 Connection
有的时候不需要直接把所有的文件读入内存, 这种情况下可以使用链接 (connection) 的方法读取文件. 需要注意的是, 建立链接并不读取文件, 当使用结束后还应该关闭链接.
connections
connections 的函数都是在 base 包中的, 包括 open, close 等. 链接可以用到之前需要使用文件名作为参数的地方, 如在 write.table 的参数中可以把一个链接赋值给 file 参数. 创建的链接默认不会打开, 需要使用包括 open 在内的其他函数打开链接.
创建链接
- file: 创建文件链接.
- url: 创建 url 链接.
- gzfile: 创建 gz 压缩文件链接.
- bzfile: 创建 bz 压缩文件链接.
- xzfile: 创建 bz 压缩文件链接.
- unz: 创建只读的 zip 压缩文件链接.
- pipe: 创建管道链接.
- fifo: 按先进先出的队列打开.
- socketConnection: 创建需要账号等信息的 socket 链接.
- textConnection: 使用变量等对象建立链接.
创建链接的函数有 open 选项, 可以选择链接类型, 其中 "t" 是创建 text 链接, "b" 是创建 binary 链接.
- "r" 或者 "rt" 创建只读的 text 链接.
- "w" 或者 "wt" 创建重新写的 text 链接.
- "a" 或者 "at" 创建续写的 text 链接.
- "rb" 创建只读的 binary 链接.
- "wb" 创建重新写的 binary 链接.
- "ab" 创建续写的 binary 链接.
- "r+", "r+b" 创建读写的链接.
- "w+", "w+b" 创建读写的链接, 在起始时先清除链接.
-
"a+", "a+b" 创建附加读写的链接.
-
seek: 用来改变链接指针的位置.
打开和关闭链接
当链接被打开并被操作之后, 链接的位置指针会从头向后移动, 一定读取等操作之后会移动到链接末尾.
- open: 打开创建的链接.
- close: 关闭打开的链接.
- isOpen: 判断链接是否打开.
- isIncomplete: 判断链接是否被阻断.
一些函数可以直接打开链接, 有的以文本形式打开, 有的以二进制形式打开.
文本
- readLines: 从链接中读取一定的行数 (n, 如果 n 为负数则读取整个文件).
- writeLines: 把一定的内容以文本形式写入一个链接.
- cat: 把一些对象连接并输出到文件或者链接.
- sink: 把 R 的输出导向文件 (名) 或链接.
- scan: 从文件或链接读取, what 参数可以指定读取数据的保存类型.
- parse: 接受文件名或者链接做为解析参数.
- read.dcf, write.dcf: debian control file.
- dput, dget: 以 ASCII 码形式保存或读取 R object.
- dump: 把一系列以变量名标示的 R object 解析为文本保存到文件或链接, 会把相应的 R 代码保存.
二进制
- readBin
- readChar
- writeBin
- writeChar
- load
- save
大数据量
如果数据的量十分大, 也许不太适合把所有数据都读入内存, 这样就需要能够每次只按照需要从硬盘上读取需要的数据量.
- readLines: 从文件读取一定数量的行.
R 数据对象的存储和读取
有的时候需要把 R 中的对象存储下来, 以便下次直接使用或者换计算机使用. R 可以存储和读取特定的文件直接到内存中, 相应的 R 对象都会被保存.
- save.image: 把 R 中所有的对象 (ls 显示的对象) 都保存在文件中, 默认为 .RData
- save: 把特定的 R 对象保存在文件中.
- load: 把文件中保存的 R 对象读入内存.