欢迎来到天天文库
浏览记录
ID:52760123
大小:47.50 KB
页数:10页
时间:2020-04-13
《S语言程序控制结构.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、S语言程序控制结构S是一个表达式语言,其任何一个语句都可以看成是一个表达式。表达式之间以分号分隔或用换行分隔。表达式可以续行,只要前一行不是完整表达式(比如末尾是加减乘除等运算符,或有未配对的括号)则下一行为上一行的继续。若干个表达式可以放在一起组成一个复合表达式,作为一个表达式使用。组合用大括号表示,如:>{>x<-15>x>}S语言程序控制结构分支结构:分支结构包括if结构:if(条件)表达式1或if(条件)表达式1else表达式2其中的“条件”为一个标量的真或假值,表达式可以是用大括号包围的复合表达式。有
2、else子句时一般写成:if(条件){表达式组……}else{表达式组………}S语言程序控制结构逻辑运算!:逻辑非NOT&,&&:逻辑与AND
3、,
4、
5、:逻辑或ORS语言程序控制结构例如,如果变量lambda为缺失值就给它赋一个缺省值,可用:if(is.na(lambda))lambda<-0.5又比如要计算向量x的重对数,这只有在元素都为正且对数都为正时才能做到,因此需要先检查:if(all(x>0)&&all(log(x))>0){y<-log(log(x));print(cbind(x,y));}else{
6、cat('Unabletocomply');}S语言程序控制结构循环结构:循环结构中常用的是for循环,是对一个向量或列表的逐次处理,格式为“for(nameinvalues)表达式”,如:for(iinseq(along=x){cat('x(',i,')=',x[i],'',sep='');s<-s+x[i];}S语言程序控制结构当然,如果只是要求各元素的和,只要调用sum(x)即可。从这里我们也可以看出,显式的循环经常是可以避免的,利用函数对每个元素计算值、使用sum等统计函数及apply、lapp
7、ly、sapply、tapply等函数往往可以代替循环。因为循环在S中是很慢的(S-PLUS和R都是解释语言),所以应尽可能避免使用显式循环。S语言程序控制结构计算同生日的概率。假设一共有365个生日(只考虑月、日),而且各生日的概率是相等的(这里忽略了闰年的情况以及可能存在的出生日期分布的不均匀)。设一个班有n个人,当n大于等于365时至少两个人生日相同是必然时间。当n小于365时,我们可以计算P{至少有两人同生日}=1-P{n个人生日彼此不同},这时,n个人的生日可取值数为,而n个人彼此不同的可能数为365
8、中取n个的排列数,彼此不同的概率为。因此,为了计算n=1,2,...,364的情况下的同生日概率,可以用如下循环实现:S语言程序控制结构>x<-numeric(364)>for(iin1:364){+x[i]<-1+for(jin0:(i-1)){+x[i]<-x[i]*(365-i)/365+}+x[i]<-1-x[i]+}S语言程序控制结构我们可以尽量用向量运算来实现,速度要快得多:>x<-numeric(364)>for(nin1:364){+x[n]<-1-prod((365:(365-n+1))/36
9、5)+}注意不能直接去计算365!,这会超出数值表示范围。S语言程序控制结构while循环是在开始处判断循环条件的当型循环,如:while(b-a>eps){c<-(a+b)/2if(f(c)>0)b<-celsea<-c}是一段二分法解方程的程序。
此文档下载收益归作者所有