数据价值-DataValues

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 164|回复: 0

[R语言] R语言编程入门之六:循环与条件_R语言编程培训

[复制链接]

1万

主题

1万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
39027
发表于 2016-12-5 13:06:21 | 显示全部楼层 |阅读模式
R语言编程入门之六:循环与条件,
循环
for (n in x) {expr}
R中最基本的是for循环,其中n为循环变量,x通常是一个序列。n在每次循环时从x中顺序取值,代入到后面的expr语句中进行运算。下面的例子即是以for循环计算30个Fibonacci数。
x
for (i in 3:30) {
    x
}
,
while (condition) {expr}
当不能确定循环次数时,我们需要用while循环语句。在condition条件为真时,执行大括号内的expr语句。下面即是以while循环来计算30个Fibonacci数。
x
i
while (i
    x
    i
},
条件
if (conditon) {expr1} else {expr2}
if语句用来进行条件控制,以执行不同的语句。若condition条件为真,则执行expr1,否则执行expr2。ifesle()函数也能以简洁的方式构成条件语句。下面的一个简单的例子是要找出100以内的质数。
x
y
for (i in 3:100) {
    if (all(i%%(2:(i-1))!=0)){
        y
        } else {y
                }
}
print(x[y]),
在上面例子里,all()函数的作用是判断一个逻辑序列是否全为真,%%的作用是返回余数。在if/else语句中一个容易出现的错误就是else没有放在}的后面,若你执行下面的示例就会出现错误。
logic = 3
x
if (logic == 2){
    y
}
else {
  y
}
show(y),
一个例子
本例来自于”introduction to Scientific Programming and Simulatoin Using R”一书的习题。有这样一种赌博游戏,赌客首先将两个骰子随机抛掷第一次,如果点数和出现7或11,则赢得游戏,游戏结束。如果没有出现7或11,赌客继续抛掷,如果点数与第一次扔的点数一样,则赢得游戏,游戏结束,如果点数为7或11则输掉游戏,游戏结束。如果出现其它情况,则继续抛掷,直到赢或者输。用R编程来计算赌客赢的概率,以决定是否应该参加这个游戏。,
craps
    #returns TRUE if you win, FALSE otherwise
    initial.roll
    if (initial.roll == 7 || initial.roll == 11) return(TRUE)
    while (TRUE) {
        current.roll
        if (current.roll == 7 || current.roll == 11) {
            return(FALSE)
        } else if (current.roll == initial.roll) {
            return(TRUE)
        }
    }
}
mean(replicate(10000, craps())),
从最终结果来看,赌客赢的概率为0.46,长期来看只会往外掏钱,显然不应该参加这个游戏了。最后要说的是,本题也可以用递归来做。,,
追问:为什么我按照您的for (n in x) {expr}代码输进去 不能出来30个Fibonacci数啊,好像是NA,
解答:正确程序
x
for (i in c(3:30)) {
  x,
x 应该是x[ i ] ,,
问:
我陷入死循环了,如何强制退出…………..,
答:按“中断当前的计算”按钮即可,,
R break 终止整个循环
R next 终止当前循环,,
for(i in 3:30){
zjbl<-x[i-1]+x[i-2];
x<-c(x,zjbl);
print(zjbl)
}
这种格式也可以计算Fibonacci数。其中zjbl保证新生成的数加入原数列中,形成新的数列,
转载请注明:数据分析 » R语言编程入门之六:循环与条件_R语言编程培训
回复

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|小黑屋|DataValues ( 赣ICP备16006919号 ) DataValues

GMT+8, 2019-7-20 16:17 , Processed in 0.105903 second(s), 29 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表