楼主: kk22boy
1949 2

[R] R语言编程入门之六:循环与条件 [推广有奖]

  • 8关注
  • 95粉丝

一叶知秋

学科带头人

51%

还不是VIP/贵宾

-

TA的文库  其他...

计量经济与统计

SSCI、权威 论文写作及投稿经验

威望
1
论坛币
56594 个
通用积分
128.9629
学术水平
437 点
热心指数
492 点
信用等级
393 点
经验
67522 点
帖子
1589
精华
0
在线时间
2188 小时
注册时间
2005-3-10
最后登录
2024-4-2

初级热心勋章 初级信用勋章

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

循环+条件+案例


循环



for (n in x) {expr}

      R中最基本的是for循环,其中n为循环变量,x通常是一个序列。n在每次循环时从x中顺序取值,代入到后面的expr语句中进行运算。下面的例子即是以for循环计算30个Fibonacci数。

  1. x <- c(1,1)
  2. for (i in 3:30) {
  3.     x <- x[i-1]+x[i-2]
  4. }
复制代码



while (condition) {expr}

    当不能确定循环次数时,我们需要用while循环语句。在condition条件为真时,执行大括号内的expr语句。下面即是以while循环来计算30个Fibonacci数。

  1. x <- c(1,1)
  2. i <- 3
  3. while (i <= 30) {
  4.     x <- x[i-1]+x[i-2]
  5.     i <- i +1
  6. }
复制代码





条件




if (conditon) {expr1} else {expr2}

      if语句用来进行条件控制,以执行不同的语句。若condition条件为真,则执行expr1,否则执行expr2。ifesle()函数也能以简洁的方式构成条件语句。下面的一个简单的例子是要找出100以内的质数。

  1. x <- 1:100
  2. y <- rep(T,100)
  3. for (i in 3:100) {
  4.     if (all(i%%(2:(i-1))!=0)){
  5.         y <- TRUE
  6.         } else {y <- FALSE
  7.                 }
  8. }
  9. print(x[y])
复制代码


      在上面例子里,all()函数的作用是判断一个逻辑序列是否全为真,%%的作用是返回余数。在if/else语句中一个容易出现的错误就是else没有放在}的后面,若你执行下面的示例就会出现错误。
  1. logic = 3
  2. x<- c(2,3)
  3. if (logic == 2){
  4.     y <- x^2
  5. }
  6. else {
  7.   y<-x^3
  8. }
  9. show(y)
复制代码



一个例子



      本例来自于"introduction to Scientific Programming and Simulatoin Using R"一书的习题。有这样一种赌博游戏,赌客首先将两个骰子随机抛掷第一次,如果点数和出现7或11,则赢得游戏,游戏结束。如果没有出现7或11,赌客继续抛掷,如果点数与第一次扔的点数一样,则赢得游戏,游戏结束,如果点数为7或11则输掉游戏,游戏结束。如果出现其它情况,则继续抛掷,直到赢或者输。用R编程来计算赌客赢的概率,以决定是否应该参加这个游戏。


  1. craps <- function() {
  2.     #returns TRUE if you win, FALSE otherwise
  3.     initial.roll <- sum(sample(1:6,2,replace=T))
  4.     if (initial.roll == 7 || initial.roll == 11) return(TRUE)
  5.     while (TRUE) {
  6.         current.roll <- sum(sample(1:6,2,replace=T))
  7.         if (current.roll == 7 || current.roll == 11) {
  8.             return(FALSE)
  9.         } else if (current.roll == initial.roll) {
  10.             return(TRUE)
  11.         }
  12.     }
  13. }
  14. mean(replicate(10000, craps()))
复制代码



      从最终结果来看,赌客赢的概率为0.46,长期来看只会往外掏钱,显然不应该参加这个游戏了。最后要说的是,本题也可以用递归来做
By 写长城的诗
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:R语言编程 语言编程 编程入门 R语言 Fibonacci 语言编程 语言编程 循环 条件 编程 入门

已有 1 人评分经验 论坛币 收起 理由
niuniuyiwan + 60 + 60 精彩帖子

总评分: 经验 + 60  论坛币 + 60   查看全部评分

本帖被以下文库推荐

如果该贴对您有些许帮助,希望你能回复一下或者评一下热心指数!谢谢!
沙发
niuniuyiwan 在职认证  发表于 2015-8-11 08:04:23 |只看作者 |坛友微信交流群
好帖,感谢分享,今天热心指数已经用完了,只能加这么多了,好贴啊好帖。

使用道具

藤椅
420948492 发表于 2017-10-24 22:35:19 |只看作者 |坛友微信交流群
谢谢分享

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-1 16:40