楼主: kk22boy
148435 28

[程序分享] 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数。
x <- c(1,1)
for (i in 3:30) {
    x <- x[i-1]+x[i-2]
}

while (condition) {expr}
当不能确定循环次数时,我们需要用while循环语句。在condition条件为真时,执行大括号内的expr语句。下面即是以while循环来计算30个Fibonacci数。
x <- c(1,1)
i <- 3
while (i <= 30) {
    x <- x[i-1]+x[i-2]
    i <- i +1
}



条件
if (conditon) {expr1} else {expr2}
if语句用来进行条件控制,以执行不同的语句。若condition条件为真,则执行expr1,否则执行expr2。ifesle()函数也能以简洁的方式构成条件语句。下面的一个简单的例子是要找出100以内的质数。
x <- 1:100
y <- rep(T,100)
for (i in 3:100) {
    if (all(i%%(2:(i-1))!=0)){
        y <- TRUE
        } else {y <- FALSE
                }
}
print(x[y])

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

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

craps <- function() {
    #returns TRUE if you win, FALSE otherwise
    initial.roll <- sum(sample(1:6,2,replace=T))
    if (initial.roll == 7 || initial.roll == 11) return(TRUE)
    while (TRUE) {
        current.roll <- sum(sample(1:6,2,replace=T))
        if (current.roll == 7 || current.roll == 11) {
            return(FALSE)
        } else if (current.roll == initial.roll) {
            return(TRUE)
        }
    }
}
mean(replicate(10000, craps()))

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

扫码加我 拉你入群

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

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

关键词:R语言编程 语言编程 编程入门 R语言 Fibonacci 语言编程

已有 4 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
Sunknownay + 3 + 3 + 3 鼓励积极发帖讨论
crystal8832 + 10 + 1 + 1 + 1 根据规定进行奖励
李会超 + 60 + 40 观点有启发
epoh + 5 + 5 + 5 对论坛有贡献

总评分: 经验 + 60  论坛币 + 50  学术水平 + 9  热心指数 + 9  信用等级 + 9   查看全部评分

如果该贴对您有些许帮助,希望你能回复一下或者评一下热心指数!谢谢!
29
kaifengedu 发表于 2023-6-8 20:40:43 |只看作者 |坛友微信交流群
10年的老贴,楼主这个答案应该有些问题,理论解近似等于0.49

使用道具

28
liufeiv5 发表于 2018-4-22 21:42:59 来自手机 |只看作者 |坛友微信交流群
kk22boy 发表于 2013-3-6 16:10
循环
for (n in x) {expr}
R中最基本的是for循环,其中n为循环变量,x通常是一个序列。n在每次循环时从x ...
??

使用道具

27
jlwjlwjlw 发表于 2017-8-29 13:34:56 |只看作者 |坛友微信交流群
静後 发表于 2015-10-10 00:02
最近在学循环  但是遇到困难- -头发都要白了 还是没解决
怎么让while下面的一直循环到满足条件 感谢
t
关键在于v[1]<-max(v),当v序列中的原宿均为“max(v)”同时也是“min(v)”时陷入死循环
selsort<-function(t,v){
  l<-length(v)
  if(l==1){
    return(v)
  } else while(length(t)!=l){  
           for(i in 1:l) {
        if(v==min(v) & v!=max(v)){
        t<-c(t,v)
        v<-max(v)
        }else  return(t)
    }
  }
}

使用道具

26
tianyj 发表于 2017-8-19 22:39:47 |只看作者 |坛友微信交流群

赞专项的基础普及,简单快速针对性强!

使用道具

25
jiaobingke 发表于 2016-7-29 21:09:52 |只看作者 |坛友微信交流群
墨名 发表于 2015-2-25 14:46
上面那个仍然不是正确的程序,应该是x
应该是x[ i ] <- x[i-1]+x[i-2],这样才对. 这个网站的显示有问题,会将想x[ i ] 显示成x,我在 i 和中括号之间加了空格才解决了。

使用道具

24
westbrook! 发表于 2016-7-12 23:16:12 |只看作者 |坛友微信交流群
sisterlove73 发表于 2014-12-25 10:31
正确程序
x
为什么这两个运行出来都是NA

使用道具

23
Kun806 学生认证  发表于 2016-7-8 09:58:28 |只看作者 |坛友微信交流群
for(i in 3:30){
zjbl<-x[i-1]+x[i-2];
x<-c(x,zjbl);
print(zjbl)
}
这种格式也可以计算Fibonacci数。其中zjbl保证新生成的数加入原数列中,形成新的数列

使用道具

22
remember618 发表于 2016-1-20 20:11:11 |只看作者 |坛友微信交流群
请问谁有这个帖子的全部系列啊

使用道具

21
cheetahfly 在职认证  发表于 2015-10-10 00:28:04 |只看作者 |坛友微信交流群
mark一下,以后细读

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

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

GMT+8, 2024-5-22 11:24