R语言控制结构知识点总结
if(condition) true_expression else false_expression
if(condition) expression
因为表达式expression,true_expression,false_expression并非总是被执行,因此if函数的类型是special
>typeof(`if`) [1]"special"
在R中.条件语句不是向量型运算
如果条件语句是由一个以上的逻辑值组成的向量,那么执行语句时只会用到向量中的第一个元素
x=10 y=c(8,10,12,3,17) if(x [1]81012317 Warningmessage: Inif(x1andonlythefirstelementwillbeused 想要向量化操作需要使用ifelse函数
>ifelse(xswitch函数
swithcheroo.swith=function(x){ switch(x,a="alligator",b="bear",c="camel","moose") }>swithcheroo.swith("a") [1]"alligator" >swithcheroo.swith("f") [1]"moose"循环语句
repeat
创建交互应用程序时用到
for
用于遍历向量/列表的每一个项目
for(varinlist)expression
- 循环内的计算结果不打印在屏幕上,除非显式地调用print
- var变量在命令环境中是变化的
循环扩展
迭代器iterators
通过扩展包iterators实现迭代器iterators
install.packages("iterators")迭代器可以返回向量,数组,数据框或者其他对象的元素,甚至返回某个函数返回的值
iter函数创建迭代器:
参数:iter(obj,checkFunc=function(...)T,recycle=F,...)
- obj:指定对象
- by:
- chunksize:
- checkFunc:指定一个过滤迭代器返回值的函数
- recycle:指定当对象元素迭代完之后是否对迭代进行重置
- ...:
nextElem函数:查看下一个迭代项,这个函数会隐式地调用checkFunc
如果下一个值符合checkFunc,则返回该值
如果不符合,函数将试着返回另外一个值.nextElem函数会继续检查其他值,直到找到一个符合checkFunc的值.如果所有值都迭代完毕,没有元素符合,迭代器会调用停止命令,并返回StopIteration
library(iterators) oneoffive=iter(1:5) >nextElem(oneoffive) [1]1 >nextElem(oneoffive) [1]2 >nextElem(oneoffive) [1]3 >nextElem(oneoffive) [1]4 >nextElem(oneoffive) [1]5 >nextElem(oneoffive) Error:StopIterationforeach循环
通过foreach包实现foreach循环
install.packages("foreach")foreach能够循环遍历某个对象(向量,矩阵,数据框或者迭代器)中的多个元素,针对各个元素执行表达式,并返回结果
在foreach函数内部,将元素指定一个临时值,与在for循环中的操作类似
function(...,.combine,.init,.final=NULL,.inorder=TRUE, .multicombine=FALSE,.maxcombine=if(.multicombine)100else2, .errorhandling=c("stop","remove","pass"),.packages=NULL, .export=NULL,.noexport=NULL,.verbose=FALSE)foreach函数返回一个foreach对象
想要真正地执行循环,需要使用
- %do%:顺序执行表达式
- 或%dopar%:并行执行表达式
library(foreach) sqrts.1to5=foreach(i=1:5)%do%sqrt(i) sqrts.1to5 [[1]] [1]1 [[2]] [1]1.414214 [[3]] [1]1.732051 [[4]] [1]2 [[5]] [1]2.236068到此这篇关于R语言控制结构知识点总结的文章就介绍到这了,更多相关R语言控制结构详解内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。