第三章 r的数据操作_第1页
第三章 r的数据操作_第2页
第三章 r的数据操作_第3页
第三章 r的数据操作_第4页
第三章 r的数据操作_第5页
已阅读5页,还剩110页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、R的数据操作第三章R语言 吉林农业大学(2008年4月)13.1 对象 R通过一些对象来运行,当然首先这些对象是用它们的名称和内容来刻画的,其次也通过对象的数据类型即属性来刻画 这个变量可以是一个整数变量(例如巢中蛋的个数),或者也可以是一个分类变量的编码(例如某些甲壳类动物的三种性别:雄、雌和雌雄同体)。 显然对这个变量的统计分析在以上两例中将是不相同的,对象的属性在R中提供着所需的信息。更技术性也更一般地说,对于作用于一个对象的函数,其表现将取决于对象的属性R语言 吉林农业大学(2008年4月)2 所有的对象都有两个内在属性:类型和长度。类型是对象元素的基本种类,共有四种:数值型,字符型,

2、 复数型和逻辑型(FALSE或TRUE) 也存在其它的类型,但是并不能用来表示数据,例如函数或表达式、null(空值型,只有一个特殊值NULL, 表示没有对象值。),长度是对象中元素的数目。R语言 吉林农业大学(2008年4月)3对象的类型和长度可以分别通过函数mode和length得到。 x mode(x)1 numeric length(x)1 1 A - Gomphotherium; compar - TRUE; z mode(A); mode(compar); mode(z)1 character1 logical1 complexR语言 吉林农业大学(2008年4月)4无论什么类型的

3、数据,缺失数据总是用NA(不可用)来表示;对很大的数值则可用指数形式表示: N N 1 2.1e+23 x mode(x) 1 numeric length(x) 1 4R语言 吉林农业大学(2008年4月)5R可以正确地表示无穷的数值,如用Inf和-Inf表示+和,或者用NaN(非数字)表示不是数字的值。 x x1 Inf exp(x)1 Inf exp(-x)1 0 x-x1 NaNR语言 吉林农业大学(2008年4月)6字符型的值输入时须加上双引号“,如果需要引用双号的话,可以让它跟在反斜杠后面;这两个字符合一起”在某些函数如cat的输出显示或write.table写入磁盘时会被以特殊的

4、方式处理。 x x 1 Double quotes delimitate Rs strings. cat(x) Double quotes delimitate Rs strings.R语言 吉林农业大学(2008年4月)7也有另一种表示字符型变量的方法,即用单引号()来界定变量,这种情况下不需要用反斜杠来引用双引号(但是引用单引号时必须要用!) x x 1 Double quotes delimitate Rs strings. cat(x) Double quotes delimitate Rs strings.R语言 吉林农业大学(2008年4月)8数据的对象的类别概览R语言 吉林农业大

5、学(2008年4月)9向量是一个变量,其意思也即人们通常认为的那样;因子是一个分类变量;数组是一个k维的数据表;矩阵是数组的一个特例,其维数k = 2。注意,数组或者矩阵中的所有元素都必须是同一种类型的;数据框是由一个或几个向量和(或)因子构成,它们必须是等长的, 但可以是不同的数据类型;“ts”表示时间序列数据,它包含一些额外的属性,例如频率和时间; 列表可以包含任何类型的对象,包括列表!对于一个向量,用它的类型和长度足够描述数据;而对其它的对象则另需一些额外信息,这些信息由外在的属性给出。这些属性中的是表示对象维数的dim,比如一个2行2列的的矩阵,它的dim是一对数值2,2,但是其长度是

6、4。R语言 吉林农业大学(2008年4月)103.2 在文件中读写数据对于文件读取和写入的工作,R使用工作目录来完成。可以使用命令getwd() (获得工作目录)来找到目录,使用命令setwd(C:/data) 或者setwd(/home/paradis/R) 来改变目录。如果一个文件不在工作目录里则必须给出它的路径. 在Windows中,为Rgui.exe创建一个快捷方式是比较有用的, 在快捷方式“属性”的“起始位置”中改变目录,然后用此快捷方式启动R时这个目录就会成为工作目录R语言 吉林农业大学(2008年4月)11 R可以用下面的函数读取存储在文本文件(ASCII)中的数据 read.t

7、able,scan和read.fwf。R也可以读取以其他格式的文件(Excel, SAS, SPSS, . . . ) 和访问SQL类型的数据库,但是基础包中并不包含所需的这些函数。这些功能函数对于R的高级应用是十分有用的。函数read.table用来创建一个数据框,所以它是读取表格形式的数据的主要方法。举例来说,对于一个名为data.dat的文件,命令: mydata mydata - scan(data.dat, what = list(, 0, 0)读取了文件data.dat中三个变量,第一个是字符型变量,后两个是数值型变量。另一个重要的区别在于scan()可以用来创建不同的对象,向量,

8、矩阵,数据框,列表. . . 在上面的例子中,mydata是一个有三个向量的列表。在缺省情况下,也就是说,如果what 被省略,scan()将创建一个数值型向量。如果读取的数据类型与缺省类型或指定类型不符,则将返回一个错误信息。这些选项在下面进行说明。R语言 吉林农业大学(2008年4月)17 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 = F

9、ALSE, strip.white = FALSE, quiet = FALSE,blank.lines.skip = TRUE, multi.line = TRUE, comment.char = )R语言 吉林农业大学(2008年4月)18R语言 吉林农业大学(2008年4月)19 函数read.fwf可以用来读取文件中一些固定宽度格式的数据: read.fwf(file, widths, sep=t, as.is = FALSE,skip = 0, s, s, n = -1, .) 除了widths用来说明读取字段的宽度外, 选项与read.table()

10、 基本相同。举例来说,如果在一个名为data.txt的文件中有一组如下面所示的数据,可以读取这些数据用下面的命令:R语言 吉林农业大学(2008年4月)20 mydata 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.7R语言 吉林农业大学(2008年4月)21读其它格式的数据文件R可以读Minitab、SPLUS、SAS、SPSS、STATA、Excel格式的数据文件,但必须要调入“foreign”模块,调入方法为 library(foreign)SPSS

11、:rs-read.spss(educ_scores.sav)其变量rs是一个列表,如果打算形成数据框,则格式为:rs-read.spss(educ_scores.sav,to.data.frame=TRUE) SAS:rx-read.xport(educ_scores.xpt)S-PLUS: rs-read.S(educ_scores)Stata:rd-read.dta(educ_scores.dta)R语言 吉林农业大学(2008年4月)22 R无法直接读取Excel格式的数据文件,需要将Excel表转换成其它格式,然后才能被R读取。 转化方法: 1、将Excel表转化成“文本文件”(制表符

12、分隔)” rd-read.delim(educ_scores.txt) 2、将Excel表转化成“CSV(逗号分隔)文件” rc-read.csv(educ_scores.csv)R语言 吉林农业大学(2008年4月)233.3 存储数据 函数write.table可以在文件中写入一个对象,一般是写一个数据框,也可以是其它类型的对象(向量,矩阵. . . )。参数和选项: write.table(x, file = , append = FALSE, quote = TRUE, sep= ,eol = n, na = NA, dec = ., s = TRUE,

13、s = TRUE, qmethod = c(escape, double)R语言 吉林农业大学(2008年4月)24R语言 吉林农业大学(2008年4月)25 df n write(n,file=fbb.txt)R语言 吉林农业大学(2008年4月)273.4 生成数据 3.4.1 规则序列 例如一个从1到30的规则整数序列,可以这样产生: x 1:10-1 1 0 1 2 3 4 5 6 7 8 9 1:(10-1) 1 1 2 3 4 5 6 7 8 9R语言 吉林农业大学(2008年4月)283.4 生成数据3.4.1 规则序列函数seq可以生成如下的实数序列: seq(1, 5, 0.

14、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.0R语言 吉林农业大学(2008年4月)293.4 生成数据 3.4.1 规则序列 如果想用键盘输入一些数据也是可以的,只需要直接使

15、用默认选项的scan函数: z z 1 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0R语言 吉林农业大学(2008年4月)303.4 生成数据3.4.1 规则序列函数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

16、 1 2 3 4 5R语言 吉林农业大学(2008年4月)313.4 生成数据 3.4.1 规则序列 函数gl(生成不同的水平/层次数据)十分有用,因为它能产生规则的因子序列。这个函数的用法是gl(k,n),其中k是水平数(或类别数),n是每个水平重复的次数。 此函数有两个选项:length用来指定产生数据的个数,labels 用来指定每个水平因子的名字。例如:R语言 吉林农业大学(2008年4月)323.4 生成数据3.4.1 规则序列 gl(3, 5)1 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3Levels: 1 2 3 gl(3, 5, length=30)1 1 1

17、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 3Levels: 1 2 3 gl(2, 6, label=c(Male, Female)1 Male Male Male Male Male Male7 Female Female Female Female Female Female Levels: Male FemaleR语言 吉林农业大学(2008年4月)333.4 生成数据3.4.1 规则序列 gl(2, 10)1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2Levels: 1 2 gl(2,

18、 1, length=20)1 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2Levels: 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 2Levels: 1 2R语言 吉林农业大学(2008年4月)343.4 生成数据3.4.1 规则序列expand.grid()创建一个数据框,结果是把各参数的各水平完全搭配: expand.grid(h=c(60,80), w=c(100, 300), sex=c(Male, Female)h w sex1 60 100 Male2 80 10

19、0 Male3 60 300 Male4 80 300 Male5 60 100 Female6 80 100 Female7 60 300 Female8 80 300 FemaleR语言 吉林农业大学(2008年4月)353.4 生成数据 3.4.2 随机序列 在统计学中,产生随机数据是很有用的,R可以产生多种不同分布下的随机数序列。 这些分布函数的形式为rfunc(n,p1,p2,.),其中func指概率分布函数,n为生成数据的个数,p1, p2, . . . 是分布的参数数值。下面的表给出了每个分布的详情和可能的缺省值(如果没有给出缺省值,则意味着用户必须指定参数)R语言 吉林农业大学

20、(2008年4月)363.4 生成数据R语言 吉林农业大学(2008年4月)373.5 使用对象3.4.2随机序列大多数这种统计函数都有相似的形式,只需用d、p或者q去替代r,比如密度函数(dfunc(x, .),累计概率密度函数(也即分布函数)(pfunc(x,.)和分位数函数(qfunc(p, .),0 p qnorm(0.025) 1 -1.959964 qnorm(0.975) 1 1.959964对于同一个检验的单侧临界值,根据备择假设的形式使用qnorm(0.05)或1 -qnorm(0.95)。R语言 吉林农业大学(2008年4月)383.5 使用对象 3.4.2随机序列 sam

21、ple()函数:可产生随机样本 sample(10) 12967 1034851 sample(20) 1 15 17 16 19 128 6 1032 201 139 147 18 1145R语言 吉林农业大学(2008年4月)393.5 使用对象 3.5.1 创建对象 我们在前面看到了用赋值操作创建对象的不同方法;在这样的创建中对象的数据类型和模式通常都已经预先确定了。在创建一个对象时是有可能指定它的数据类型、长度、类别等等的。从处理对象的角度来看这些方法是很有趣的。举例来说,我们可以创建一个空的对象并且逐步修改其中的元素, 这比把所有的元素一起用c()放进去更有效。在这里也可以使用下标系

22、统,后面我们将会看到。R语言 吉林农业大学(2008年4月)403.5 使用对象 3.5.1 创建对象 在R的学习阶段,我们很有必要了解下面的函数和数据结构。直接创建数据结构不仅能让我们对数据有更好的理解,而且也会更深入地领会前文中提到的一些概念。 向量(Vector) 在线性代数中,向量是指n个实数组成的有序数组称为n维向量。一般用,等希腊字母表示.有时也用a,b,c,o,u,v,x,y等拉丁字母表示.=(a1,a2,an)称为n维向量.其中ai称为向量的第i个分量.R语言 吉林农业大学(2008年4月)413.5 使用对象 3.5.1 创建对象 函数vector有两个参数:类型(mode)

23、和长度(length),创建的向量中元素值取决于参数所指定的数据类型:数值型向量则元素值都为0,逻辑型都为FALSE,字符型都为。以下三个函数有几乎相同的效果(创建一个向量)并且只有一个参数即长度:numeric(),logical(),和character()R语言 吉林农业大学(2008年4月)423.5 使用对象3.5.1 创建对象因子(Factor) 一个因子不仅包括分类变量本身还包括变量不同的可能水平(即使它们在数据中不出现)。因子函数factor用下面的选项创建一个因子:factor(x, levels = sort(unique(x), na.last = TRUE), labe

24、ls = levels, exclude = NA, ordered = is.ordered(x)levels 用来指定因子可能的水平(缺省值是向量x中互异的值);labels用来指定水平的名字;exclude表示从向量x中剔除的水平值;ordered是一个逻辑型选项用来指定因子的水平是否有次序。R语言 吉林农业大学(2008年4月)433.5 使用对象3.5.1 创建对象 factor(1:3) 1 1 2 3Levels: 1 2 3 factor(1:3,levels=1:5) 1 1 2 3Levels: 1 2 3 4 5 factor(1:3,labels=c(A,B,C)1 A

25、 B CLevels: A B C factor(1:5,exclude=4)1 123 5Levels: 1 2 3 5R语言 吉林农业大学(2008年4月)443.5 使用对象 3.5.1 创建对象 函数levels用来提取一个因子中可能的水平值: ff ff 1 2 4 Levels: 2 3 4 5 levels(ff) 1 2 3 4 5R语言 吉林农业大学(2008年4月)453.5 使用对象 3.5.1 创建对象 矩阵(Matrix) 一个矩阵实际上是有一个附加属性(维数dim) 的向量,维数即为一个长度为2的向量,用来指定矩阵的行数 和列数。一个矩阵可以用函数matrix来创建

26、: matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE,dimnames = NULL) 选项byrow表示数据给出的值是要按列填充(缺省值)还是按行填充(如果为TRUE)。可以通过选项dimnames给行列命名。R语言 吉林农业大学(2008年4月)463.5 使用对象3.5.1 创建对象 matrix(data=5,nr=2,nc=2),1 ,21,2,5555 matrix(5,nr=2,nc=2) ,1 ,21,2,5555 matrix(1:6,nr=2,nc=3) ,1 ,2 ,31,2,123456 matrix(1:6,nr=

27、2,nc=3,byrow=TRUE) ,1 ,2 ,31,2,142536R语言 吉林农业大学(2008年4月)473.5 使用对象3.5.1 创建对象 matrix() ,11,NA matrix(1:6) ,11,2,3,4,5,6,123456matrix(1:6,nr=3,nc=2,byrow=TRUE,dimnames=list(c(row1,row2,row3),c(c.1,c.2)c.1 c.2row1 row2 row3135246R语言 吉林农业大学(2008年4月)483.5 使用对象3.5.1 创建对象另一种创建矩阵的方法是给维数适当的赋值(初始值为NULL): x x1

28、123 45 dim(x) NULL dim(x) x,1 ,2 ,36789 10 11 12 13 14 151,2,3,4,5,123456789101112131415 dim(x) 1 5 3R语言 吉林农业大学(2008年4月)493.5 使用对象 3.5.1 创建对象 数据框(Data frame) 前面我们已经看到一个数据框可以由函数read.table 间接创建;这里也可以用函数data.frame来创建。数据框中的向量必须有相同的长度,如果其中有一个比其它的短,它将“循环”整数次(以使得其长度与其它向量相同):R语言 吉林农业大学(2008年4月)503.5 使用对象3.5

29、.1 创建对象 x-1:4;n-10;M-c(13,35);y data.frame(x,n) xn1 1 102 2 103 3 104 4 10 data.frame(x,M) xM1 1 132 2 353 3 134 4 35 data.frame(x,y)错误于data.frame(x, y) : 变元值意味着不同的行数 4, 3R语言 吉林农业大学(2008年4月)513.5 使用对象 3.5.1 创建对象 如果一个因子包含在一个数据框中,它必须和其中的向量有相同的长度。 列名也是可以改变的,例如,data.frame(A1=x, A2=n)。用户也可以使用s给行命

30、名,但是,这个命名向量必须是字符型的而且长度等于这个数据框的行数。 最后,注意数据框和矩阵一样有维数这个属性。R语言 吉林农业大学(2008年4月)523.5 使用对象3.5.1 创建对象 B B1 4 5 6 7Levels: 4 5 6 7 data.frame(x,B) x B1 1 42 2 53 3 64 4 7 data.frame(A1=x,A2=n) A1 A212341 102 103 104 10R语言 吉林农业大学(2008年4月)533.5 使用对象 3.5.1 创建对象 rc rc A1 A2 a b c d1 102 103 104 10 dim(rc) 1 4 2

31、R语言 吉林农业大学(2008年4月)543.5 使用对象3.5.1 创建对象列表(List) 列表可以用list函数创建,方法与创建数据框类似。它对其中包含的对象没有什么限制。和data.frame()比较, 缺省值没有给出对象的名称 x-1:4;y L1-list(x,y);L2 L1 11 1 2 3 421 2 3 4R语言 吉林农业大学(2008年4月)553.5 使用对象3.5.1 创建对象 L2$A1 1 2 3 4$B1 2 3 4 names(L1) NULL names(L2)1 A BR语言 吉林农业大学(2008年4月)563.5 使用对象 3.5.1 创建对象 时间序

32、列(Time-series) 函数ts可以由向量(一元时间序列) 或者矩阵(多元时间序列)创建一个ts型对象,并且有一些 表明序列特征的选项(带有缺省值),它们是: ts(data = NA, start = 1, end = numeric(0), frequency = 1, deltat = 1, ts.eps = getOption(ts.eps), class, names)R语言 吉林农业大学(2008年4月)573.5 使用对象3.5.1 创建对象data 一个向量或者矩阵start 第一个观察值的时间,为一个数字或者是一个由两个整数构成的向量(参见下面的例子)end 最后一个观

33、察值的时间,指定方法和start相同frequency 单位时间内观察值的频数(频率)deltat 两个观察值间的时间间隔( 例如, 月度数据的取值为1/12);frequency和deltat必须并且只能给定其中之一ts.eps 序列之间的误差限。如果序列之间的频率差异小于ts.eps则认为这些序列的频率相等。class 对象的类型;一元序列的缺省值是ts,多元序列的缺省值是c(mts, ts)names 一个字符型向量, 给出多元序列中每个一元序列的名称; 缺省为data中每列数据的名称或者Series 1,Series 2, . . .R语言 吉林农业大学(2008年4月)583.5 使

34、用对象3.5.1 创建对象 ts(1:10,start=1959) Time Series:Start = 1959End = 1968Frequency = 11123456789 10 ts(1:47,frequency=12,start=c(1959,2)Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec19591960196119621132537234152739516284061729417183042891020324411213345122436142638193143223446233547R语言 吉林农业大学(2008年4月)59

35、3.5 使用对象3.5.1 创建对象 ts(1:10,frequency=4,start=c(1959,2)Qtr1 Qtr2 Qtr3 Qtr419591960196115923486107 ts(matrix(rpois(36,5),12,3),start=c(1961,1),frequency=12)Series 1 Series 2 Series 3Jan 1961Feb 1961Mar 1961Apr 1961May 1961Jun 19612865024810876735676注:Rpois:Density, distribution function, quantile func

36、tion and random generation for the Poisson distribution with parameter lambdaR语言 吉林农业大学(2008年4月)603.5 使用对象 3.5.1 创建对象 表达式(Expression) 表达式类型的对象在R中有着很基础的地位,是R能够解释的字符序列。所有有效的命令都是表达式。一个命令被直接从键盘输入后,它将被R求值,如果是有效的则会被执行。 在很多情况下,构造一个不被求值的表达式是很有用的:这就是函数expresssion要做的。当然也可以随后用eval()对创建的表达式进行求值。R语言 吉林农业大学(2008年

37、4月)613.5 使用对象 3.5.1 创建对象 x-3;y-2.5;z exp1 exp1 expression(x/(y + exp(z) eval(exp1) 1 0.5749019R语言 吉林农业大学(2008年4月)623.5 使用对象3.5.1 创建对象表达式也可以在其它地方用来在图表中添加公式;表达式可以由字符型变量创建;一些函数把表达式当作参数,例如可以求偏导数的函数D。 D(exp1,x)1/(y + exp(z) D(exp1,y)-(x/(y + exp(z)2) D(exp1,z)-(x * exp(z)/(y + exp(z)2)R语言 吉林农业大学(2008年4月)

38、633.5 使用对象 3.5.2 对象的类型转换 一些类型的对象之间的差异是很小的;因此改变一个对 象的某些属性使它转换为另一种类型的对象是合乎逻辑的。as.something这种形式的函数可以完成转换。R的base和utils 包中有多种这种函数在里面,所以在这里不做深入的阐述。 很明显转换取决于被转换对象的属性。一般来说,转换遵循一些很直观的规则。对于类型的不同转换,下表总结了不同的情况。R语言 吉林农业大学(2008年4月)643.5 使用对象R语言 吉林农业大学(2008年4月)653.5 使用对象 3.5.2 对象的类型转换 有许多函数可以用来转换对象的类型(as.matrix, a

39、s.ts, as.data.frame,as.expression, . . . ),这些函数在转换时会影响除了类型之外的属性,将得到的结果在一般情况下也是容易预见的。将因子转换为数值型是R中经常遇到的情况,这种情况下R将因子的水平转化为数值编码。R语言 吉林农业大学(2008年4月)663.5 使用对象 3.5.2 对象的类型转换 fac fac 1 110 Levels: 1 10 as.numeric(fac) 1 1 2R语言 吉林农业大学(2008年4月)673.5 使用对象 3.5.2 对象的类型转换 这对于一个字符型因子来说是很有意义的: fac2 fac2 1 MaleFemale Levels: Female Male as.numeric(fac2) 1 2 1 注意这个结果可能不像根据上面表格预期的那样是NA。R语言 吉林农业大学(2008年4月)683.5 使用对象 3.5.2 对象的类型转换 要想将一个数值型因子转换为一个数值型向量并且保持最初 指定的水平值,就必须先转换成字符型然后再转换

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论