控制结构:
if () {}
多条件选择,注意else的位置,如下:
if () {
} else if () {
} else {
}
ifelse(test, yes, no) #三目操作
for (i in 1:n) {}
while () {}
break
next
输出中间结果
print(x)
cat(x,"\n") #注意"\n"的使用
向量化:
1、要充分利用R语言中向量运算的自动循环
例:x=rnorm(10); y=runif(10); z=x+y;
2、使用apply对矩阵进行自动循环
程序引用:
程序保存后可以使用source(“文件名”)进行调用
注意:文件不在当前工作目录中时,要使用绝对路径。
编写函数(子程序):
函数名 = function (参数列表) {}
函数内的变量无需声明,仅在封装环境内起作用
参数列表可设默认值
返回值:默认语句块内最后一步,但建议使用return()返回。
注意:return()应该是最后一句。
注意:虽然本人喜欢把子程序放在程序主体后面,但R语言认为应该先定义子程序。
建立一个空变量及循环添加数据:
a=NULL; #建立一个类型为NULL,长度为0的变量
for (i in 1:n) {a=c(a,i);} #循环添加向量元素
for (i in 1:n) {a=rbind(a, c(...));} #逐行添加矩阵元素
a=list(); for (i in 1:n) {a[[i]]=...;} #逐个添加列表元素
将字符串转为变量名
name='x';
assign(name, 1:5); #创建新变量并赋值,和x=1:5一样
get('x'); #获取变量的内容,x可以是任意对象,包括列表、函数等
get(name) #也可以这样
cat('x is: ', x, "\n") #屏幕输出,比print好用
使用省略号传递参数的参数
func=function(x,y,...) {print(y(x,...));}
func(0.5,punif);
func(0.5,pbeta,2,1);
将文本转为表达式并求值
x=1:10;
temp='x[1:5]';
eval(parse(text=temp)) #parse将文本转为表达式,eval求值
附:
循环利用数据索引时,使用seq比1:length(x)更好,因为length(x)可能取0
for (i in seq(x)) {if (i %% 100 == 0) {print(i);};}
程序暂停
Sys.sleep(time)