程序设计实用.pptx
《程序设计实用.pptx》由会员分享,可在线阅读,更多相关《程序设计实用.pptx(36页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、程序控制结构 R是一个表达式语言(expression language),其任何一个语句都可以看成是一个表达式。表达式之间以分号分隔或用换行分隔。表达式可以续行,只要前一行不是完整表达式(比如末尾是加减乘除等运算符,或有未配对的括号)则下一行为上一行的继续。若干个表达式可以放在一起组成一个复合表达式,作为一个表达式使用。组合用大括号表示,如:+x if(is.na(lambda)lambda if (all(x0)&all(log(x)0)y if(x0)1 else 0当x是标量时这个定义是有效的,但是当自变量x是一个向量时,比较的结果也是一个向量,这时条件无法使用。所以,这个分段函数应该
2、这样编程:y=numeric(length(x)yx0 yx=0 ifelse(condition,a,b)它表示,当conditioni成立的时候,对应的取值为ai,否则取值为bi。最终返回一个和参数向量同长的向量 x a-pass;b ifelse(x=60,a,b)1 fail pass pass pass a b ifelse(x=60,a,b)1 b1 a2 a3 a4若a,b和x不是等长的,则较短的循环使用第5页/共36页有多个if语句时else与最近的一个配对。可以使用if.else if.else if.else.的多重判断结构表示多分支。多分支也可以使用switch()函数。
3、x=0;if(x0)value-x else if(x0)value value 1 ZERO第6页/共36页switch语句switch是多分支语句,其用法为:switch(statement,list);statement是一个表达式,list是列表,也可以用有名定义。根据表达式与list的关系返回一个值。如果表达式返回值属于1:length(list)中的一个,则返回list中相应位置的值,否则返回NULL。a a x a a x a x a sum-0;for(i in 1:100)sum-sum+i;i x=numeric(365)for(i in 1:365)xi=1 for(j
4、in 0:(i-1)xi=xi*(365-j)/365 xi x for(n in 1:365)xn=1-prod(365:(365-n+1)/365)这段程序只用了1秒。注意不能直接去计算365!,这会超出数值表示范围。第11页/共36页我们有时候需要在某个判定条件成立的时候开始循环,一旦条件不成立,就终止循环,这时可以用while循环语句。while循环是在开始处判断循环条件的,用法为:while (condition)expression 表示在condition成立的时候,执行expression。例:一段二分法解方程的程序。eps while(b-aeps)c 0)b-c else
5、a f-1;f2-1;i while(fi+fi+11000)fi+2-fi+fi+1 i f 1 1 1 2 3 5 8 13 21 34 55 89 144 13 233 377 610 987第13页/共36页repeat语句是while不一样,把条件加在末尾,依赖break命令跳出循环,基本用法是:repeat expressions;if(condition)break 表示一直重复表达式的计算,知道condition成立的时候,跳出循环。repeat语句 第14页/共36页例(续):用repeat语句生成1000以内Fibonacci数列 f-1;f2-1;i repeat fi+
6、2-fi+fi+1;i=1000)break;f 1 1 1 2 3 5 8 13 21 34 55 89 144 13 233 377 610 987第15页/共36页编写自己的函数R允许用户创建自己的函数。事实上,R本身提供的绝大多数函数如sum(),plot()等,是编写人员写在R中的,与用户自己创建的函数没有本质上的区别。R中函数定义的一般格式为 function.name hello=function()cat(Hello,worldn);第16页/共36页 hello#查看函数具体内容 function()cat(Hello,worldn);hello()#运行函数 Hello,w
7、orld 函数体为一个复合表达式,各表达式的之间用换行或分号分开。不带括号调用函数显示函数定义,而不是调用函数。在命令行输入函数程序很不方便修改,所以我们一般是打开一个其他的编辑程序(如Windows 的记事本),输入以上函数定义,保存文件,比如保存到了C:Rhello.R,我们就可以用 source(“Hi.R)运行文件中的程序。实际上,用source()运行的程序不限于函数定义,任何R程序都可以用这种方式编好再运行,效果与在命令行直接输入是一样的。第17页/共36页对于一个已有定义的函数,可以用fix()函数来修改,如:fix(hello)将打开一个编辑窗口显示函数的定义,修改后关闭窗口函
8、数就被修改了。fix()调用的编辑程序缺省为记事本,可以用“options(editor=编辑程序名)”来指定自己喜欢的编辑程序。函数可以带参数,可以返回值,例如:larger-function(x,y)y.is.bigger x);xy.is.bigger fsub=function(x,y)x-y 有两个虚参数x和y,我们用它计算100-45,可以调用fsub(100,45),或fsub(x=100,y=45),或fsub(y=45,x=100),或fsub(y=45,100)。即调用时实参与虚参可以按次序结合,也可以直接指定虚参名结合。实参先与指定了名字的虚参结合,没有指定名字的按次序与
9、剩下的虚参结合。函数在调用时可以不给出所有的实参,这需要在定义时为虚参指定缺省值。例如上面的函数改为:fsub=function(x,y=0)x-y则调用时除了可以用以上的方式调用外还可以用fsub(100),fsub(x=100)等方式调用,只给出没有缺省值的实参。第19页/共36页即使没有给虚参指定缺省值也可以在调用时省略某个虚参,然后函数体内可以用missing()函数判断此虚参是否有对应实参,如:trans=function(x,scale)if(!missing(scale)x=scale*x 此函数当给了scale的值时对自变量x乘以此值,否则保持原值。这种用法在其它语言中是极其少
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 实用
限制150内