本例将介绍R语言中的while循环和if条件。最终用它来解决Project Euler的第二个问题。除了练习之外你还需要了解一些斐波纳契数列的知识。废话不多说了,打开R控制台,跟着输入下面的代码,自行琢磨吧。
# 预备练习,while循环和if判断 x <- 1:10 print(x) print(x[10]) print(x[-10]) i <- 1 while (i <= 10) { print(x[i]) i <- i + 1 } i <- 1 while (TRUE) { print(x[i]) i <- i + 1 if (i > 10) break } # 用循环和条件来完成前篇文章中的问题 # 可以体会到R语言向量化计算的特点。 x <- 1 sumx <- 0 while (x < 1000) { if (x %% 3 == 0 | x %% 5 == 0) { sumx <- sumx + x } x <- x + 1 } print(sumx) # Project Euler 2 # 找到4000000以下的斐波纳契数列 # 将其中的偶数进行求和 i <- 2 x <- 1:2 while (x[i] < 4e6) { x[i+1] <- x[i-1] + x[i] i <- i + 1 } x <- x[-i] sum(x[x %% 2 == 0])
得到的结果为4613732。使用while和if语句时要注意,其判断条件都要放在圆括号中,之后的代码段如果超过一行则要用大括号注明。
谢谢。这个网站很有趣。等着4th 和8th的答案呐。结果和正确答案对不上。
回复删除提供一个方法,不需要x <- x[-i]这一步
回复删除x = 1:2
for (i in 2:1000) {
x[i+1] = x[i-1] + x[i]
i = i + 1
if (x[i] > 4e6) break
}
sum(x[x %% 2 == 0])
这个方法貌似跟博主的一样,博主的那个删掉x<-[-i]也可以得到正确答案。
删除两个循环出来的x[i]最后都是5702887,除2不余0,sum偶数时自动就过滤掉了~~
Thanks again!
回复删除不错!
回复删除多谢博主,期待蜜月后更新~~~
回复删除为什么我把条件写在R命令好的一行上 就报错啊 :
回复删除> x<-1
> sumx<-0
> while(x<1000){if(x%%3==0){sumx <- sumx +x} x<-x+1}
错误: 意外的符号在"while(x<1000){if(x%%3==0){sumx <- sumx +x} x"里
有两行代码,你搞成一行,其中需要加分号,例如while(x<1000){if(x%%3==0){sumx <- sumx +x} ;x<-x+1}
删除你的Blob写的很有趣,作为一个R的初学者我受益良多。
回复删除想请教一个问题,有什么相关的资料,是介绍R在实际案例的应用的。
我是一个从事BI,数据仓库项目的研发。做了那么多年,最近越来越迷茫,很多项目最终很多是一个数据的展现,很少有数据挖掘的成果。 所以最近在学习R,想找寻一下接下来工作的突破口和学习方向。
你好啊,有两本书讲了很多用R做数据挖掘的例子,分别是《Data Mining with R_ Learning with Case Studies》以及《Machine Learning for Hackers》,R和数据库和BI之间有很好的交互功能,例如R可以很好的和开源BI pentaho交互。
删除