星期五, 八月 17, 2012

笨办法学R编程(1)


在倚天屠龙记中,有一人唤作火工头陀。此人练功不靠心法,只靠模仿他人招式,由外而内,自成一家。练习编程也有如此的法门,不看文字描述,只观察和模仿别人的代码。这样也可以由外而内学会编程。《笨办法学python》的作者Zed Shaw 就说过这种笨办法入门其实更简单。阳志平在他的文章《如何学习一门新的编程语言》中也讲到,初学编程要在学习区刻意的大量练习,少看理论书。

TED上一位教育家同样谈到这么一个故事,他把一个计算机扔在一个偏远的印度小村子里不去管它,在那里没有上过学的小孩就能自己学会英语和计算机的用法。实际上人脑是非常善于自我探索和学习的。因此本系列教程的特点就是只有演示代码加少量注释。通过反复模仿和练习,揣摩代码的变化和结果,你就能自行领悟其含义,并打下坚实的编程基础。

本系列每篇文章的目的都是用R语言编程来解决一个Project Euler的问题。Project Euler是一系列由易到难的计算机编程挑战,它提供了一个平台来激发我们解决问题的灵感和思路。本人写这个教程的目的有三:一是为了好玩,二是提高编程水平,三是示范说明以提供给需要的R初学者。另外从R-Blogger上了解,已经有两位高人用R在计算Project Euler,各位也可以参照他们的文章(博客1博客2)。

Let's Go

# 预备知识练习,在R控制台逐行输入观察结果
1:10
10:1
x <- 1:10
print(x)
sum(x)
x > 5
x[x > 5]
x > 5 & x < 8
x > 8 | x < 3
10 %% 3
9 %% 3
x %% 3
x %% 3 == 0
x[x %% 3 == 0]
 
# Project Euler 1
# 找到1000以下,所有能被3或5整除的数,将它们相加
x <- 1:999
sum(x[x %% 3 == 0 | x %% 5 == 0 ])
最后得数是233168,我感觉自己的解法比其它人的更体现了R的特点。各位看官,对此有何意见,也不妨多多赐教。

22 条评论:

  1. 比两行再短还有可能不,呵呵

    回复删除
    回复
    1. 兄弟若有想法也不妨写出来一起参详,:-)

      删除
    2. if you want, replace x with c(1:999), only have one line. But actually not difference.

      删除
    3. sum(seq(3, 999, 3)) + sum(seq(5, 999, 5)) - sum(seq(15, 999, 15))

      Euler Project肯定更喜欢这种思路 ^_^

      删除
    4. 要一句话解,有何难。
      sum(sapply(1:999, function(x) ifelse(x%%3 & x%%5, 0, x)))

      删除
    5. 当然,纯蛋疼,其实要表达的是:
      x <- 1:999
      sum(ifelse(x%%3 & x%%5, 0,x))
      和xccds的解法是一致的,留住符合的数字,再求和。

      删除
  2. 非常好~~我是个初学者~~通过这种方法学习乐趣横生,希望看到博主更多文章~

    回复删除
    回复
    1. 好,有这种正反馈就有干劲了。

      删除
  3. 博主一定要继续写下去 每天等更新

    回复删除
  4. 初学者表示很期待该系列的文章

    回复删除
  5. Follow your blog really teach me a lot about R. Thank you ~~~

    回复删除
  6. 我是初学者,很有趣的博文,感谢主人了,有好的这类教授课程还望多分享。

    回复删除
  7. > x%%3
    [1] 1 2 0 1 2 0 1 2 0 1

    这样的返回代表什么?%%是整除符号么?

    回复删除
  8. LZ加油继续更新啊 在中国把R发扬光大

    回复删除
  9. Great, many thanks!

    回复删除
  10. 博客2惊现本人链接!!!

    回复删除
  11. 早看到这个博客我这学期就不会过的这么痛苦

    回复删除