R语言编程结构-循环结构

R语言编程结构


1 控制语句


1.1 循环语句


x<-c(5,12,13)
for(n in x) print(n^2)
## [1] 25
## [1] 144
## [1] 169
i<-1
while(i<=10) i<-i+4
i
## [1] 13
i<-1
while(TRUE){#similar loop to above
  i<-i+4
  if(i>10) break
}
i
## [1] 13
i<-1
repeat{ # again similar
  i<-i+4
  if(i>10) break
}
i
## [1] 13
另外一个重要的语句是next,它会告诉解释器跳过本次迭代的剩余部分,直接进入循环的下一次迭代。这避免了使用复杂的if-then-else嵌套结构,不致让代码混乱不清。


sim<-function(nreps){
  commdata<-list()
  commdata$countabsamecomm<-0
  for(rep in 1:nreps){
    commdata$whoselft<-1:20
    commdata$numabchosen<-0
    if(commdata$numabchosen>0) next
    commdata<-choosencomm(commdata,4)
    if(commdata$numabchosen>0) next
    commdata<-choosencomm(commdata,3)
  }
  print(commdata$countabsmaecomm/nreps)
}
setwd("E:\\学习\\学习\\R语言\\R语言编程艺术\\书中程序\\第7章")
for(fn in c("file1.txt","file2.txt")) print(scan(fn))
## [1] 1 2 3 4 5 6
## [1]  5 12 13
1.2 对非向量集合的循环


R并不支持对非向量集合的循环,但是有一些间接但简单的方法可以做到这点:


1.使用lapply()。如果循环的每次迭代之间相互独立,就使用lapply()。可以允许以任意顺序执行。


2.使用get()。正如名字暗示的一样,这个函数接受一个代表对象名字的字符串参数,然后返回改对象的名字。


来看一个使用get()的例子,例如有两个包含了统计数据的矩阵u和v ,我们希望对每一个矩阵执行线性回归函数lm()。


(u<-matrix(c(1,2,3,1,2,4),nrow=3))
##      [,1] [,2]
## [1,]    1    1
## [2,]    2    2
## [3,]    3    4
(v<-matrix(c(8,12,20,15,10,2),nrow=3))
##      [,1] [,2]
## [1,]    8   15
## [2,]   12   10
## [3,]   20    2
for(m in c("u","v")){
  z<-get(m)
  print(lm(z[,2]~z[,1]))
}
## 
## Call:
## lm(formula = z[, 2] ~ z[, 1])
## 
## Coefficients:
## (Intercept)       z[, 1]  
##      -0.667        1.500  
## 
## 
## Call:
## lm(formula = z[, 2] ~ z[, 1])
## 
## Coefficients:
## (Intercept)       z[, 1]  
##       23.29        -1.07
1.3 if-else结构


x<-2
y<-if(x==2) x else x+1
y
## [1] 2
x<-3
y<-if(x==2) x else x+1
y
## [1] 4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jiabiao1602

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值