........................................................完......................................... 控制流
将R语言操作过的命令编写成程序存在R的脚本文件里保存起来。R语句之间用分号隔开,若干个语句组成复合语句用花括号{ }。
1 分支函数:if/else和switch if/else多用于两分支:
if (cond) expr ########如果条件cond成立,则执行表 ########达式expr,否则跳过
if (cond) cons.expr else alt.expr #########如果条件cond成立,
######则执行表达式cons.expr,否则执行表达式alt.expr if (any(x<=0)) y<-log(1+x) else y<-log(x)
y<-if (any(x<=0)) log(1+x) else log(x) ######等价 if/else可以嵌套使用: If (con_1) expr_1 else if (con_2) expr_2 else if (con_3) expr_3
11
else expr_4
2 switch函数:多用于多个分支
switch(expr, list),参数expr为表达式,list为列表,如果expr的取值在1~length(list)之间,则函数返回列表相应位置的值,如果expr的取值超出范围,则无返回值: switch(1,2+3,2*3,2/3) switch(2,2+3,2*3,2/3) switch(3,2+3,2*3,2/3)
如果list有元素名,当expr等于元素名时,返回变量名对应的值,否则无返回值: y<- \
switch(y,fruit= \ \ \
3 中止语句与空语句
中止语句Break:强行中止循环,使程序调到循环以外, 空语句next:表示继续执行,而不执行任何有实质性的内容。
4 循环函数
for, while, 和repeat
1) for循环: for(var in seq) expr
12
参数var为循环变量,seq为向量表达式(通常是个序列,如:1:20), expr通常为一组表达式: C x
2) while函数:while (cond) expr, 表示当条件cond成立,则执行表达式expr。 f<-c(1,1);i<-1
while(f[i]+f[i+1]<1000) { f[i+2]<- f[i]+f[i+1] i<-i+1; } f
3) repeat函数 格式:repeat expr
repeat函数依赖中止语句(break)跳出循环,如实现上面同样功能:
f<-c(1,1);i<-1 repeat {
f[i+2]<- f[i]+f[i+1] i<-i+1
if (f[i]+f[i+1]>=1000) break
13
} f
或者改为: f<-c(1,1);i<-1 repeat {
f[i+2]<- f[i]+f[i+1] i<-i+1
if (f[i]+f[i+1]<1000) next else break } f
………………………….完……………………………
R程序设计 1 函数定义
定义函数的格式:funname<-function(arg_1,arg_2,…)
expression
####funname为函数名,function定义函数的关键词,arg_1,arg_2,…表示函数的参数,expression为表达式(通常是复合表达式),放在表达式中最后的对象(数值、向量、矩阵、数组或数据框等)为函数的返回值。
调用函数的格式: function(expr_1,expr_2,…) 注意:(1)不要在R的操作窗口下编写函数;
14
(2)在使用时,须将函数调到R中“文件-〉运行R脚本文件”,选择需要运行包含该函数的脚本,如:将其保存为 funname.R, 则运行该脚本即可使用funname函数了。
2 无参数函数 welcome<-function() print(\
######将其保存为welcome.R,运行该脚本即可使用welcome函数 3 带有参数的函数
var(x) 函数表示求向量x的方差,即 var(x)=sum((x-mean(x))^2)/(length(x)-1) sd(x) 函数表示求向量x的标准差,即sd(x)=
编写函数练习:如果X和Y分别是来自两个总体的样本, 总体的方差相同且未知,编写一个计算两样本统计量T的 函数,统计量T的公式为:
,
和分别代表来自两组数据样本的均值,别为两组数据样本的方差,和的个数。
15
和分
分别为两组数据样本