R语言编程结构

Posted 拱头

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R语言编程结构相关的知识,希望对你有一定的参考价值。

函数与控制结构相关:
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的括号是必不可少的。
基本运算符
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差不多),所以函数名可以作为对象返回。
函数的参数可以是别的函数:
置换函数:
当我们遇到形如:
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

以上是关于R语言编程结构的主要内容,如果未能解决你的问题,请参考以下文章

R语言使用ggplot2包使用geom_dotplot函数绘制分组点图(改变分组的次序)实战(dot plot)

R语言使用ggplot2包使用geom_violin函数绘制分组小提琴图(自定义分组的次序)实战

R语言使用ggplot2包geom_jitter()函数绘制分组(strip plot,一维散点图)带状图(改变分组次序)实战

R语言使用lm函数拟合多元线性回归模型假定预测变量没有交互作用(Multiple linear regression)

R语言使用lm函数拟合多元线性回归模型假定预测变量之间有交互作用R语言使用effects包的effect函数查看交互作用对于回归模型预测响应变量的影响

R语言使用lm函数拟合多元线性回归模型假定预测变量之间有交互作用R语言使用effects包的effect函数查看交互作用对于回归模型预测响应变量的影响