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 文件名(在""之内),可能包含它的路径(符号\不允许使用,必 须用/替代,即使是在Windows下面),或者使用一个URL链接 (http:/):如果le=”,数据从键盘输入(使用一个空白行 终止输入) what 指定数据的类型(缺省值为数值型) nmax 要读取数据的最大数量,如果hat是一个列表,nmax则是可以读取 的行数(在缺省情况下,scan读取到文件最末端为止的所有数据) n 要读取数据的最大数量(在缺省情况下,没有限制) sep 文件中的字段分隔符 quote 用来包围字符型值 dec 用来表示小数点的字符 skip 在读取数据前跳过的行数 nlines 要读取的行数 na.string 表示缺失数据的字符串(转化为为WA) flush 一个逻辑值,如果为TRUE,当读取完指定列数后scan将转到下一行 (这样就允许用户在数据文件中添加注释,即添加在指定列数之后) fill 如果为IUE,且非所有的行中变量数目相同,则用空白填补 strip.white 在seP己指定的情况下,如果为TUE,则删除字符型变量前后多余的 空格 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,...) 13
> 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 文件名(在""之内), 可能包含它的路径(符号\ 不允许使用,必 须用/替代, 即使是在Windows下面),或者使用一个URL链接 (http://...);如果file=””,数据从键盘输入(使用一个空白行 终止输入) 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, ...) 13
除了widths用来说明读取字段的宽度外,选项 A1.501.2 与read.table()基本相同。举例来说,如果在一个名 A1.551.3 为data.txt的文件中有一组如右所示的数据,可以读取这 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 1A1.501.2 2A1.551.3 3B1.601.4 4B1.651.5 5C1.701.6 6C1.751.7 3.3存储数据 函数write.table可以在文件中写入一个对象,一般是写一个数据框,也 可以是其它类型的对象(向量,矩阵..)。参数和选项: write.table(x,file =""append FALSE,quote TRUE,sep ="" eol ="\n",na "NA",dec ="."row.names TRUE, col.names TRUE,qmethod c("escape","double")) 14
除 了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 3.3 存储数据 函数write.table可以在文件中写入一个对象,一般是写一个数据框,也 可以是其它类型的对象(向量,矩阵. . .)。参数和选项: write.table(x, file = "", append = FALSE, quote = TRUE, sep = " ", eol = "\n", na = "NA", dec = ".", row.names = TRUE, col.names = TRUE, qmethod = c("escape", "double")) 14
要写入的对象的名称 file 文件名(缺省时对象直接被“写”在屏幕上) append 如果为TUE则在写入数据时不删除目标文件中可能己存在的数据,采取往后 添加的方式 quote 一个逻辑型或者数值型向量:如果为TUE,则字符型变量和因子写在双引 号"中:若quote是数值型向量则代表将欲写在"中的那些列的列标。(两种 情况下变量名都会被写在"中:若quote=FLSE则变量名不包含在双引号 中) sep 文件中的字段分隔符 eol 使用在每行最后的字符(\口“表示回车) na 表示缺失数据的字符 dec 用来表示小数点的字符 row.names 一个逻辑值,决定行名是否写入文件:或指定要作为行名写入文件的字符型 向量 col.names 一个逻辑值(决定列名是否写入文件):或指定一个要作为列名写入文件中 的字符型向量 qmethod 若quote=-TUE,则此参数用来指定字符型变量中的双引号"如何处理: 若参数值为"escape"(或者"e",缺省)每个"都用趴"替换;若值为"d"则每 个"用"替换 若想用更简单的方法将一个对象写入文件,可以使用命令wrte(x, file="data.txt"),其中x是对象的名字(它可以是向量,矩阵,或者数 组)。这里有两个选项:nc(或者ncol),用来定义文件中的列数(在缺 省情况下,如果x是字符型数据,则nc=1:对于其它数据类型nc=5), 和append(一个逻辑值),若为TUE则添加数据时不删除那些可能已存在 在文件中的数据:若为FALSE(缺省值)则删除文件中已存在的数据。 要记录一组任意数据类型的对象,我们可以使用命令save(x,y,z, file="xyz.RData")。可以使用选项ASCII=TRUE使得数据在不同的机器之 间更简易转移。数据(用R的术语来说叫做工作空间)可以在使用1oad("xyz RData")之后被加载到内存中。函数save.image()是save(1ist-ls(all-TRUE), file=".Data")的一个简捷方式。 3.4生成数据 3.4.1规则序列 例如一个从1到30的规则整数序列,可以这样产生: >x<-1:30 这个结果向量x有30个元素。算子:'的优先级可从如下表达式中看出: >1:10-1 [1]0123456789 >1:(10-1) 15
x 要写入的对象的名称 file 文件名(缺省时对象直接被“写”在屏幕上) append 如果为TRUE则在写入数据时不删除目标文件中可能已存在的数据,采取往后 添加的方式 quote 一个逻辑型或者数值型向量:如果为TRUE,则字符型变量和因子写在双引 号""中;若quote是数值型向量则代表将欲写在""中的那些列的列标。(两种 情况下变量名都会被写在""中;若quote = FALSE则变量名不包含在双引号 中) sep 文件中的字段分隔符 eol 使用在每行最后的字符("\n"表示回车) na 表示缺失数据的字符 dec 用来表示小数点的字符 row.names 一个逻辑值,决定行名是否写入文件;或指定要作为行名写入文件的字符型 向量 col.names 一个逻辑值(决定列名是否写入文件);或指定一个要作为列名写入文件中 的字符型向量 qmethod 若quote=TRUE,则此参数用来指定字符型变量中的双引号"如何处理: 若参数值为"escape" (或者"e",缺省)每个"都用\"替换;若值为"d"则每 个"用""替换 若想用更简单的方法将一个对象写入文件,可以使用命令write(x, file ="data.txt"),其中x是对象的名字(它可以是向量,矩阵,或者数 组)。这里有两个选项:nc(或者ncol),用来定义文件中的列数(在缺 省情况下,如果x是字符型数据,则nc=1;对于其它数据类型nc=5), 和append(一个逻辑值),若为TRUE则添加数据时不删除那些可能已存在 在文件中的数据;若为FALSE(缺省值)则删除文件中已存在的数据。 要记录一组任意数据类型的对象,我们可以使用命令save(x, y, z, file= "xyz.RData")。可以使用选项ASCII=TRUE使得数据在不同的机器之 间更简易转移。数据(用R的术语来说叫做工作空间)可以在使用load("xyz. RData")之后被加载到内存中。函数save.image()是save(list =ls(all=TRUE), file=".RData")的一个简捷方式。 3.4 生成数据 3.4.1 规则序列 例如一个从1到30的规则整数序列,可以这样产生: > x <- 1:30 这个结果向量x有30个元素。算子‘:’的优先级可从如下表达式中看出: > 1:10-1 [1] 0 1 2 3 4 5 6 7 8 9 > 1:(10-1) 15
[1]123456789 函数seq可以生成如下的实数序列: >seg(1,5,0.5) [1]1.01.52.02.53.03.54.04.55.0 其中第一个数字表示序列的起点,第二个表示终点,第三个是生成序列的步 长。也可以这样使用: seq(length=9,from=1,to=5) [1]1.01.52.02.53.03.54.04.55.0 还可以用函数c直接输入数值: >c(1,1.5,2,2.5,3,3.5,4,4.5,5) [1]1.01.52.02.53.03.54.04.55.0 如果想用键盘输入一些数据也是可以的,只需要直接使用默认选项 的scan函数: >z <-scan() 1:1.01.52.02.53.03.54.04.55.0 10: Read 9 items >z [1]1.01.52.02.53.03.54.04.55.0 函数rep用来创建一个所有元素都相同的向量: >rep(1,30) [1]111111111111111111111111111111 函数sequence创建一系列连续的整数序列,每个序列都以给定参数的数 值结尾: sequence(4:5) [1]123412345 sequence(c(10,5)) [1]1234567891012345 函数g1(生成不同的水平/层次数据)十分有用,因为它能产生规则的因 子序列。这个函数的用法是g1(k,n),其中k是水平数(或类别数),n是 每个水平重复的次数。此函数有两个选项:1 ength用来指定产生数据的个 数,1abe1s用来指定每个水平因子的名字。例如: 16
[1] 1 2 3 4 5 6 7 8 9 函数seq可以生成如下的实数序列: > seq(1, 5, 0.5) [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 其中第一个数字表示序列的起点,第二个表示终点,第三个是生成序列的步 长。也可以这样使用: > seq(length=9, from=1, to=5) [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 还可以用函数c直接输入数值: > c(1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5) [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 如果想用键盘输入一些数据也是可以的,只需要直接使用默认选项 的scan函数: > z <- scan() 1: 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 10: Read 9 items > z [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 函数rep用来创建一个所有元素都相同的向量: > rep(1, 30) [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 函数sequence创建一系列连续的整数序列,每个序列都以给定参数的数 值结尾: > sequence(4:5) [1] 1 2 3 4 1 2 3 4 5 > sequence(c(10,5)) [1] 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 函数gl(生成不同的水平/层次数据)十分有用,因为它能产生规则的因 子序列。这个函数的用法是gl(k,n),其中k是水平数(或类别数),n是 每个水平重复的次数。此函数有两个选项:length用来指定产生数据的个 数,labels用来指定每个水平因子的名字。例如: 16
>g1(3,5) [1]111112222233333 Levels:1 2 3 >g1(3,5,1 ength=30) [1]111112222233333111112222233333 Levels:1 2 3 gl(2,6,label=c("Male","Female")) [1]MaleMaleMale MaleMaleMale [7]FemaleFemale Female FemaleFemale Female Levels:Male Female >g1(2,10) [1]11111111112222222222 Levels:1 2 >g1(2,1,1 ength=20) [1]12121212121212121212 Levels:1 2 >g1(2,2,1 ength=20) [1]11221122112211221122 Levels:1 2 最后,expand.grid()创建一个数据框,结果是把各参数的各水平完全 搭配: expand.grid(h=c(60,80),w=c(100,300),sex=c("Male","Female")) h w sex 160100 Male 280100 Male 360300 Male 480300 Male 5 60 100 Female 6 80 100 Female 7 60 300 Female 8 80 300 Female 17
> gl(3, 5) [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 Levels: 1 2 3 > gl(3, 5, length=30) [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 Levels: 1 2 3 > gl(2, 6, label=c("Male", "Female")) [1] Male Male Male Male Male Male [7] Female Female Female Female Female Female Levels: Male Female > gl(2, 10) [1] 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 Levels: 1 2 > gl(2, 1, length=20) [1] 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 Levels: 1 2 > gl(2, 2, length=20) [1] 1 1 2 2 1 1 2 2 1 1 2 2 1 1 2 2 1 1 2 2 Levels: 1 2 最后,expand.grid()创建一个数据框,结果是把各参数的各水平完全 搭配: > expand.grid(h=c(60,80), w=c(100, 300), sex=c("Male", "Female")) h w sex 1 60 100 Male 2 80 100 Male 3 60 300 Male 4 80 300 Male 5 60 100 Female 6 80 100 Female 7 60 300 Female 8 80 300 Female 17