找回密码
 注册
查看: 19327|回复: 0

R语言中如何在文件中读写数据

[复制链接]
发表于 2011-1-22 17:59:29 | 显示全部楼层 |阅读模式
对于在文件读取和写入的工作,R使用工作目录来完成。可以使用命
令getwd() (获得工作目录)来找到目录,使用命令setwd("C:/data") 或
者setwd("/home/paradis/R") 来改变目录。如果一个文件不在工作目录里
则必须给出它的路径8。
R可以用下面的函数读取存储在文本文件(ASCII)中的数据:read.table
(其中有若干参数,见后文),scan和read.fwf。R也可以读取以其他格式的
文件(Excel, SAS, SPSS, . . . ) 和访问SQL类型的数据库,但是基础包中并不
包含所需的这些函数。这些功能函数对于R的高级应用是十分有用的,但是我
们在这里将读取文件限定在ASCII格式。
函数read.table用来创建一个数据框,所以它是读取表格形式的数据的
主要方法。举例来说,对于一个名为data.dat的文件,命令:
> mydata <- read.table("data.dat")
将创建一个数据框名为mydata,数据框中每个变量也都将被命名,
缺省值为V1, V2, . . . 并且可以单独地访问每个变量,代码为:mydata$V1,
mydata$V2, . . . , 或者用mydata["V1"], mydata["V2"], . . . , 或者还有一种方
法,mydata[, 1], mydata[,2 ], . . . 9 这里有一些选项的缺省值(即如果用户
不设定那么R将自动使用的值)见于下表:
read.table(file, header = FALSE, sep = "", quote = "\"'", dec = ".",
row.names, col.names, as.is = FALSE, na.strings = "NA",
colClasses = NA, nrows = -1,
skip = 0, check.names = TRUE, fill = !blank.lines.skip,
strip.white = FALSE, blank.lines.skip = TRUE,
comment.char = "#")
file 文件名(包在""内,或使用一个字符型变量),可能需要全路径
(注意即使是在Windows下,符号n 也不允许包含在内,必须用/替
换),或者一个URL链接(http://...)(用URL对文件远程访问)
header 一个逻辑值(FALSE or TRUE),用来反映这个文件的第一行是否包含
变量名
sep 文件中的字段分离符,例如对用制表符分隔的文件使用sep="nt"
quote 指定用于包围字符型数据的字符
dec 用来表示小数点的字符
row.names 保存着行名的向量,或文件中一个变量的序号或名字,缺省时行号取
为1, 2, 3, . . .
col.names 指定列名的字符型向量(缺省值是:V1, V2, V3, . . . )
as.is 控制是否将字符型变量转化为因子型变量(如果值为FALSE),或者仍
将其保留为字符型(TRUE)。as.is可以是逻辑型,数值型或者字符
型向量,用来判断变量是否被保留为字符。
na.strings 代表缺失数据的值(转化为NA)
colClasses 指定各列的数据类型的一个字符型向量
nrows 可以读取的最大行数(忽略负值)
skip 在读取数据前跳过的行数
check.names 如果为TRUE,则检查变量名是否在R中有效
fill 如果为TRUE且非所有的行中变量数目相同,则用空白填补
strip.white 在sep已指定的情况下,如果为TRUE,则删除字符型变量前后多余的
空格
blank.lines.skip 如果为TRUE,忽略空白行
comment.char 一个字符用来在数据文件中写注释,以这个字符开头的行将被忽略
(要禁用这个参数,可使用comment.char = "")
read.table的几个变种因为使用了不同的缺省值可以用在几种不同情况
下:
read.csv(file, header = TRUE, sep = ",", quote="\"", dec=".",
fill = TRUE, ...)
read.csv2(file, header = TRUE, sep = ";", quote="\"", dec=",",
fill = TRUE, ...)
read.delim(file, header = TRUE, sep = "\t", quote="\"", dec=".",
fill = TRUE, ...)
read.delim2(file, header = TRUE, sep = "\t", quote="\"", dec=",",
fill = TRUE, ...)
函数scan比read.table要更加灵活,它们的区别之一是前者可以指定变
量的类型,例如:
> mydata <- scan("data.dat", what = list("", 0, 0))
读取了文件data.dat中三个变量,第一个是字符型变量,后两个是数值
型变量。另一个重要的区别在于scan()可以用来创建不同的对象,向量,矩
阵,数据框,列表. . . 在上面的例子中,mydata是一个有三个向量的列表。
在缺省情况下,也就是说,如果what被省略,scan()将创建一个数值型向
量。如果读取的数据类型与缺省类型或指定类型不符,则将返回一个错误信
息。这些选项在下面进行说明。
scan(file = "", what = double(0), nmax = -1, n = -1, sep = "",
quote = if (sep=="\n") "" else "'\"", dec = ".",
skip = 0, nlines = 0, na.strings = "NA",
flush = FALSE, fill = FALSE, strip.white = FALSE, quiet = FALSE,
blank.lines.skip = TRUE, multi.line = TRUE, comment.char = "")
file 文件名(在""之内), 可能包含它的路径(符号n 不允许使用,必
须用/替代, 即使是在Windows下面) , 或者使用一个URL链接
http://...);如果&macr;le="",数据从键盘输入(使用一个空白行
终止输入)
what 指定数据的类型(缺省值为数值型)
nmax 要读取数据的最大数量,如果what是一个列表,nmax则是可以读取
的行数(在缺省情况下,scan读取到文件最末端为止的所有数据)
n 要读取数据的最大数量(在缺省情况下,没有限制)
sep 文件中的字段分隔符
quote 用来包围字符型值
dec 用来表示小数点的字符
skip 在读取数据前跳过的行数
nlines 要读取的行数
na.string 表示缺失数据的字符串(转化为为NA)
flush 一个逻辑值,如果为TRUE,当读取完指定列数后scan将转到下一行
(这样就允许用户在数据文件中添加注释,即添加在指定列数之后)
fill 如果为TRUE,且非所有的行中变量数目相同,则用空白填补
strip.white 在sep已指定的情况下,如果为TRUE,则删除字符型变量前后多余的
空格
quiet 一个逻辑值,如果为FALSE,scan显示一行信息说明哪些字段被读取
blank.lines.skip 如果为TRUE,忽略空白行
multi.line 当what是一个列表时,若为FALSE则表示列表中每个个体的所有变量
都在同一行中
comment.char 指定注释开始字符,一行中以这个字符开头的部分将被忽略(缺是禁
用此选项)
函数read.fwf可以用来读取文件中一些固定宽度格式的数据:
read.fwf(file, widths, sep="\t", as.is = FALSE,
skip = 0, row.names, col.names, n = -1, ...)
除了widths用来说明读取字段的宽度外, 选项
与read.table()基本相同。举例来说,如果在一个名
为data.txt的文件中有一组如右所示的数据,可以读取这
些数据用下面的命令:
A1.501.2
A1.551.3
B1.601.4
B1.651.5
C1.701.6
C1.751.7
> mydata <- read.fwf("data.txt", widths=c(1, 4, 3))
> mydata
V1 V2 V3
1 A 1.50 1.2
2 A 1.55 1.3
3 B 1.60 1.4
4 B 1.65 1.5
5 C 1.70 1.6
6 C 1.75 1.7
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|小黑屋|生物统计家园 网站价格

GMT+8, 2024-11-22 02:36 , Processed in 0.027660 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表