函数与控制结构相关:



for结构:
 for (var in seq) statement
 例如:
 for (i in 1:10) print(i)
while结构:
 while (cond) statement
repeat结构:
 repeat statement
 repeat是用来重复执行statement部门的函数,需要配合break来使用,否则无法结束循环。
 例如:
 i<-1
 repeat{
 i<-i+1
 if(i>10) break
 }
if-else结构:
 if (cond) statement
 if (cond) statement1 else statement2
ifelse结构:
 ifelse (cond, statement1, statement2)
switch结构:
 switch (expr,...)
 例如:
 > feelings=c("sad","afraid")
 > for (i in feelings)
 + print(
 + switch(i,
 + happy="I am glad you are happy",
 + afraid="There is nothing to fear",
 + sad = "Cheer up",
 + angry = "Calm down now"
 + )
 + )
 [1] "Cheer up"
 [1] "There is nothing to fear"
自定义函数:
 myfunction = function(arg1,arg2,...){
 statements
 return(object)
 }
%       anything       %:      



> "%!%" <- function(X, y) { ... }

break,next

break的作用和别的语言一样,就不说了。

next的作用和java中continue的作用一样。

return():

如果控制语句中需要使用到return的时候,return的括号是必不可少的。

基本运算符

r语言 跳过该循环 r语言continue语句_数组

formals(FUN)函数和body(FUN)函数:

formals函数用来查看FUN函数的参数,body函数用来查看FUN函数的函数体

page(FUN)函数和edit(FUN):

page函数用来查看代码比较长的FUN的源代码。

edit函数可以直接调出文本编辑器来编辑FUN函数。

parent.frame(n):

这个函数用来查看当前命名空间的上n层空间的名字。



语法及概念说明:



在R中的向量,dataFrame中,使用负数索引有特别的用途。


负数索引说明剔除索引位绝对值对应元素后剩下的元素。

算术表达式中使用向量将会对该向量的每一个元素都进行同样算术运算。出现在同一个表达式中的向量最好是长度一致。如果他们的长度不一样,该表达式的值将是一个和其中最长向量等长的向量。表达式中短的向量会被 循环使用(recycled )(可能是部分的元素 )以达到最长向量的长度。

R语言数列的计数从“1”开始,不是从“0”开始

数据向量( data vector )的值在数组中的排列顺序采用 FORTRAN 方式的数组



元素次序,即 \ 按列次序 " ,也就是说第一下标变化最快,最后下标变化最慢。



假定数组 a 的维数向量是 c(3,4,2) ,则 a 中有 3*4*2 = 24 元素,依次为 a[1,1,1],



a[2,1,1], ..., a[2,4,2], a[3,4,2] 。

如果想在一个函数里面全局赋值或者永久赋值,可以采用 \强赋值 "( superassignment)操作符 <<- 或者采用函数assign()

R语言将函数也定义为对象(和scala差不多),所以函数名可以作为对象返回。

函数的参数可以是别的函数:

r语言 跳过该循环 r语言continue语句_赋值_02

置换函数:
 当我们遇到形如:
 g(u)<-v
 R语言会尝试用以下方式执行:
 u<-"g<-"(u,value=v)
 (使用双引号是因为函数包含特殊符号)事实上,当我们使用
 > a[1]
 [1] FALSE
 > a[1]<-TRUE
 的时候,也是使用了函数"["()读向量元素和置换函数"[<-"()用于写操作:
 例子:
 newbookvec<-function(x){
 tmp<-list()
 tmp$vec<-x
 tmp$wrts<-rep(0,length(x))
 class(tmp)<-"bookvec"
 return(tmp)
 }

 "[.bookvec"<-function(bv,subs){
 return(bv$vec[subs])
 }

 "[<-.bookvec"<-function(bv,subs,value){
 bv$wrts[subs]<-bv$wrts[subs]+1
 bv$vec[subs]<-value
 return(bv)
 }

 > b<-newbookvec(c(3,3,4,5,6,7))
 > b[2]
 [1] 3
 > b[2]<-5
 > b[2]
 [1] 5
定义二元运算符:
 “%a2b%”<-function(a,b) return(a+2*b)

 3%a2b%5
 输出:13