又放假了,这次是“复活节”

March 29, 2013

Tags:菜鸟学R语言

为什么说“又”呢,因为法国的假日太多了。

1. 法国一年有多少假期?

对于我这种上班就是放假,放假还想上班,闲不住的人来说,法国的假期很人“抓狂“,来法国不到一年,没数过有多少假期,不过不不知道:

法国共有11个法定假日,分别是国庆节、圣诞节、元旦、五一劳动节、万圣节、圣灵降临节、复活节、耶稣升天节、圣母升天节以及一战停战日和二战停战日。如果假日当天是星期二或星期四,那么这一天可以“带”上星期一或星期五与双休日连休。

彻头彻尾的”懒人国“啊,不过如此弹丸之国的经济总量世界第五,也就暂且放他一马吧。尤其是我所在的图卢兹——空客航天城,作为非专业人士看来,就是一个普通的欧洲小城。

2. 复活节是干吗的?可以吃吗?

作为一个人文知识极度匮乏的理科生,一个在资本主义的水深火热中生存的无宗教信仰的社会主义好青年,复活节对我来说就是,不要去单位了。

我专门查了下复活节(法语,La Pâque),

复活节是纪念耶稣基督在十字架受刑死后复活的节日,西方信基督教的国家都过这个节。每年春分月圆之后第一个星期日。

注意,在国内的时候知道西方国家的父亲节、母亲节,是某个月的第几个星期日,其不确定性只依赖”星期“这一个变量。但复活节可不一般,是综合了阳历、阴历、星期,三个变量的节日,其飘忽不定的特性和足球中后卫主罚禁区前任意球,球的飞行轨迹差不多。虽然复杂,但每年的挂历还得印,日记本还得生产,上面的节日都是印刷之前现场演算的吗?我小时候看挂历的时候真以为是这样的,直到今天看百度百科的时候,才知道,这个还有算法可以算的。

年份只限于1900年到2099年

  1. 设要求的那一年是Y年,从Y减去1900,其差记为N;

  2. 用19作除数去除N,余数记为A;

  3. 用4作除数去除N,不管余数,把商记为Q;

  4. 用19去除7A+1,把商记为B,不管余数;

  5. 用29去除11A+4-B,余数记为M;

  6. 用7去除N+Q+31-M,余数记为W;

  7. 计算25-M-W。

得出答数即可定出复活节的日期。若为正数,月份为4月;如为负数,月份为3月;若为0,则为3月31日。

好吧,我读到这的时候,鼠标已经很自然的去点R studio了,因为我只会用简单的数据分析函数,还没用过R的自定义function功能,正巧dapeng同学前几天写了相关的文章,于是我参考了一下R in Nutshell,写了个自定义函数。

easter <- function(x){
  n <- x - 1900
  a <- n %% 19
  q <- n %/% 4
  b <- (7*a+1) %/% 19
  m <- (11 * a + 4 - b) %% 29
  w <- (n + q + 31 - m) %% 7
  d <- 25 - m - w
  if(d > 0 ){
    print(paste(d,"April"))
  }else{
    print("31, March")
  }
}

运行以上代码之后,就可以随便输入1900~2099之间的任意数字,得出那一年的复活节日期了,当然要用以下格式才行,比如我要看2013年的是哪一天:

easter(2013)

所得到的结果为:

[1] "31, March"

好玩吧?所用到的关键函数是:

function() {}
if() { else { } }
paste()

以上就算做复活节的彩蛋吧,

复活节彩蛋是复活节里最重要的食物象征,意味着生命的开始与延续。

希望自己蹒跚学R的脚步能够延续地迈下去。

· The end ·