资源预览内容
第1页 / 共23页
第2页 / 共23页
第3页 / 共23页
第4页 / 共23页
第5页 / 共23页
第6页 / 共23页
第7页 / 共23页
第8页 / 共23页
第9页 / 共23页
第10页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
R的语法与数据结构v语法符号v 命令或运算提示符v+ 续行符基本算术运算v+加号 v- 减号v* 乘号v/ 除号v 乘方赋值符v= 或 3+5 3-5 3/5 35 x=5 ?plot help(plot)Date2v向量向量是R中最为基本的类型一个向量中元素的类型必须相同,包括v数值型整型单精度实型双精度实型v逻辑型v复值型v字符型Date3建立向量的方法(函数)vseq() 或 : 若向量(序列)具有较为简单的规律vrep() 若向量(序列)具有较为复杂的规律vc() 若向量(序列)没有什么规律 例子: 1:10 seq(1,10,by=0.5) seq(1,10,length=21) rep(2:5,2) rep(2:5,rep(2,4) x=c(42,7,64,9) length(x)Date4向量运算中的循环法则(recycling rule)1:2+1:41:4+1:7Date5向量的下标(index)与向量子集(元素)的提取v正的下标 提取向量中对应的元素v负的下标 去掉向量中对应的元素v逻辑运算 提出向量中元素的值满足条件的元素 注:R中向量的下标从1开始,这与通常的统计或数学软 件一致而象C语言等计算机高级语言的向量下标则从0 开始! 例子: x = c(42,7,64,9) x1 x-2 xc(1,4)Date6x10 #值大于10的元素逻辑值1 TRUE FALSE TRUE FALSE xx10 #值大于10的元素1 42 64 xx10 #产生(0,1)上100个均匀分布随机数 y = runif(100, min = 0, max = 1) sum(ysum(yyx=c(42,7,64,9) y=1:4 z.df=data.frame(cbind(INDEX = y, VALUE = x) z.df INDEX VALUE 1 142 2 2 7 3 364 4 4 9 注 .df 只是为了提醒自己z.df是一个数据框架 INDEX和VALUE是重新命名的向量名字Date9数据框架子集的提出取v格式 foorow, column 其中 foo 数据框架的名称row 需要提出取的行号column 需要提出取的行号v例子(续上一例) z.df1, # 提取第一个观测(第一行)INDEX VALUE1 1 42 z.df,1 #提取第一列(第一个变量的值) 1 1 2 3 4 z.df2,1 #提取第二行第一列的元素 1 2Date10v列表(list)复杂的数据分析时,仅有向量与数据框架还不够 有时需要生成包含不同类型的对象 R的列表(list)就是包含任何类型的对象 例子: foo = list(x = 1:6, y = matrix(1:4, nrow = 2) foo$x1 1 2 3 4 5 6$y,1 ,21, 1 32, 2 4Date11列表子集的提出取v提取一个子对象如foo的x,下面三种方式等价 foo$x foo1 foo1 例子 foo$y foo2 foo2 foo12 foo$y2 foo$y4Date12v条件语句 作用: 避免除零或负数的对数等数学问题形式1: if (条件) 表达式1 else 表达式2形式2 常优于形式1! ifelse(条件, yes, no) 试比较下面的三个结果: x = c(6:-4) sqrt(ifelse(x = 0, x, NA) ifelse(x = 0, sqrt(x), NA)if (x = 0) sqrt(x) else NADate13v循环(loops) for() #若知道终止条件 for (变量 in 向量) 表达式 while() #若无法知道运行次数 while(条件) 表达式 两者通常可以转换 例1试比较两种方法 for (i in 1:5) print (1:i) i=1 while(i 和+,而源程序中是不需 要的!Date15 n = 3044 a = c(rep(1, 2 * n), rep(2, 2 * n) t = c(rep(1, n), rep(2, n), rep(2, n), rep(1, n) g = rep(rep(1:1522, rep(2, 1522), 4) y = rnorm(4 * n, mean = 4.13, sd = 0.75) ybar = data.frame(A = factor(a), G = factor(g), + T = factor(t), Intensity = y) attach(ybar) ybar1:10, # 查看ybar的前10行 res.mat = matrix(0, 1522, 8, byrow = TRUE) coef.mat = matrix(0, 1522, 4, byrow = TRUE) for(i in 1:1522) + gene.aov = aov(Intensity A + T + A * T, + sub = G = i) + res.mati, = residuals(gene.aov) # 保存ANOVA分析的残差 + coef.mati, = coef(gene.aov) # 保存ANOVA分析的方差系数 + res.mat1:10, #查看残差的前10行 coef.mat1:10, #查看方差系数的前10行Date16v向量化(vectorization)循环(loops)很有用,但如果能将一组命令向量化, 则应尽量避免循环,原因在于vC是一种编译语言,其效率是很高的;R则是一种解释 语言。在计算时,通常C要比R快100倍。v在R中充分使用向量化,因为R会立即调用C进行运算 ,因而大大提高计算的效率!例子 -见Ko-Kang Wangs “R Programming Workshop”, pp9-11 (Gamma函数作图)vVector_1.R 没有使用向量和循环的源程序vVector_2.R 使用for循环改进后的源程序vVector_3.R 使用向量化后源程序Date17v函数 函数是一系列语句的组合,在R中可以写出自己的函数 形式: 变量名 = function( 变量列表 ) 函数体 函数引用: 变量名(变量的值) 函数可以递归引用,但不提倡! 例子 使用gamma函数求n! factorial = function(n) + if (n=0) gamma(n+1)+ else print(“Please input a positive integer!“)+ factorial(6)factorial(-6)Date18用于处理错误的函数 用于处理用户输入不正确的 类型而可能出现的错误vwarning() 若错误不严重以至影响整个计算vstop() 若错误可能导致计算中止vprint() 显示必要的信息vformatC() 数值作为字符串输出vcat() 字符串联,可以插入n(换行)及t(tab键 )vpaste() 字符粘贴(非字符型自动转换) 例子: cat(“R“, “is“,“a good“, “software.n“)formatC(1/3, format = “f“, digits = 4) formatC(1/3, format = “e“, digits = 4) paste(1:12) # 与as.character(1:12)等价 paste(“A“, 1:6, sep = “) paste(“today is“, date()Date19R中的编程v编程的重要性一个统计软件(包)应该包罗万象所有统计方法 或技术,可以完成所有的任务?这是一种错误的观点!v太贵!v费时!vSAS是一个世界上最为优秀的统计分析软件之一,但 !当然SAS具体编程能力,而SPSS更糟!v通过编程可以实现(开发)满足自己需要的函数或宏包 Date20v好的编程习惯 为了他人,更为你本人! 你的程序应该具有v可读性(readability)v可理解性(understandability) 习惯之一:行前缩进(Indentation),在此推荐使用软件vWinEdt = 已开发了基于WinEdt的R使用平台 v(X)Emacs =已开发了基于(X)Emacs的R使用平台vUltraEdit 习惯之二:增加注释(Commenting),它是你的帮助R中使用#作为注释语句的开始. 习惯之三:变量的命名,使用意义明确的名字,切忌使用人或宠物 的名字Date21例子 缩进 for(i in 1:1522) + gene.aov for(i in 1:1522) + gene.aov - aov(Intensity A + T + A * T, + sub = G = i) + res.mati, - residuals(gene.aov) + coef.mati, - coef(gene.aov) + Date22v实例演示1Julian Faraway提供的一个简短的入门Introduction to R v使用 R GUIv使用 R Commanderv使用 R_XEmacs Further reference: Moores The Basic Practice of Statistics, Second Edition (Freeman, 2000), 2. John Verzani 提供的统计学入门SimpleR - Using R for Introductory Statistics v使用R_WinEdtDate23
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号