kzeng's blog

鹧鸪天·无题杂感和友人新春词次韵

        汉祖彭城遁走时,
        苻坚淝水起忧思。
        壮心不共成败老,
        管甚东风第几枝。

        梅似雪,
        柳如丝。
        卫公咍叹魏王词,
        余香翠被红拂暖,
        留枕宓妃岂可知。

读到友人新春词一首:

新春 (by leawolf)

几度天涯佳节时。
岁初岁暮引愁思。
韶光已共行人老,
春雨更催花满枝。
山如笑,草如丝。
踏青还忆去年词。
眼前无限好烟景,
故国他乡浑不知。

顺口也诌了几句见上,过了初一就是新一年,诸事当作则作,宁可夜奔,也不能抱个枕头妄自嗟呀。这点上,李卫公比陈思王强。

Blog分类: 

新奥尔良流水帐 (2)

因为一个临时约定的面试,白天只好闷在旅馆里看书,虽然关于 survey 的东西以前多多少少的作过,后来在研究所也没少作 reweighting、imputation、linearization这些东西,但是毕竟不是最喜欢的,这个面试也有些鸡肋,但是不管怎样,既然约好了,就不能不准备一下,到了傍晚才有机会出门继续我的瞎逛。出门向右,几步外看到了一个招牌:

IMG_2016 原来这里就是臭名昭著的“联合水果公司”的原址。还记得高中政治课本里这个公司的恶名,几乎是新殖民主义的代名词。当然后来这间公司也知道自己名声不佳,现在它改名叫做 Chiquita 了,现在吃的香蕉多半还是它进口的,可怜的香蕉共和国们。

沿着 St Charles 街走,十字路口又看到了有轨电车,再加上背后的法式建筑,突然让人觉得有时光错乱的感觉,似乎是回到了三十年代上海的法租界,只是那位背着橙白相间书包的小姑娘有些不合拍,如果她穿着民国改良旗袍,就更完美了。

IMG_2018 穿过 Canal 大街,进入 French Quaters,街道两边的建筑都很有特色,特别是有镂空金属花纹修饰的阳台。街转角处还有一位黑人大叔在拉小提琴,长长的呜咽,单调的忧伤(语出自某id的签名档)。

IMG_2024

顺手在街边拿了一幅免费的地图,附近似乎有个 Jackson Square 是地标,于是游荡过去,一座公园,骑马的雕像,背后是教堂。

IMG_2027有人在吹长号,《Amazing Grace》 ,还没等我走过去,他的曲调已经有意无意的改变为 Jazz,顺着公园转了一个圈,街边看到了驴车,街对过有人在表演街头马戏。

IMG_2033穿过马戏的人群,是一个高台,上面立着一尊炮,某个角度看去,炮、骑士与教堂融为一体,似乎昭示着什么,幸好炮下玩耍的孩童给这幅画面添加了一些柔软色调。

IMG_2039  然后又到了密西西比河边,马克吐温 again,这次倒是想起他一句话,记得不完整,又 google 了一遍:

"Twenty years from now you will be more disappointed by the things that you didn't do than by the ones you did so." --Mark Twain

所以,做事情趁年轻,比如这个季节跳进密西西比河里游泳:

IMG_2042但是我没有去游泳,在此记下,看看二十年后会不会后悔。French Quater 其实也不大,很快就转了个遍,然后走进跟前的一间饭馆,一是因为它炖东西调料的气味确实诱人;二是因为它声称建于1803年,如果没记错,这一年美国从法国手里买了路易斯安娜。尝了一下新奥尔良当地流行的鸡尾酒 Hurricane,名字听起来很暴力,但是喝起来却很甜,甜到尝不出酒味了,只是到了最后,才有一点 rum 的味道;还尝了当地著名的 Creole Gumbo,是一种加了硬米饭的汤,汤里炖的有海鲜和蔬菜,味道还不错;主菜是 Seafood Platter,裹了面油炸的虾、软壳蟹、牡蛎还有鱼排,很奇怪的吃法。抬头看到了墙上橱窗里的霓虹灯广告: East Oyster, Love Longer

Blog分类: 

新奥尔良流水账(1)

春天是开会的季节(夏天和秋天也是),没过破五,就到新奥尔良来了,Mardi Gras (狂欢节)刚结束,downtown的街道上能看到很多丢弃的闪光的塑料项链。中午到达,安顿好了旅馆,去领了大会的 name tag 和日程安排,熟悉的人基本上都没有来这次年会,不知道是不是因为过年的缘故,突然萌发了一种极其幼稚的想法 —— 我一个人的城市。

这种憧憬大概从小时候就有,到一个陌生的没有任何熟人的城市,走街串巷就像城市历险,但是从来都未曾如愿过,身边总有朋友或者亲人同行,这次倒实现了这样毫无意义的愿望。开会的宾馆里人声鼎沸,带着牌子的人三五成群的交谈;我拿了牌子就匆匆的离开,几步以外就是 River Walk,兴致勃勃的找了一位黑人大姐给我照相,照完了却找不到我在相片中的何处。

IMG_2000 

爬上 River Walk 的台阶,几步远就看到了密西西比河,很宽阔,但是波澜不惊,像是一只慵懒的狗熊,河上有灯火辉煌的游船,想起了靠着这条河吃饭的马克吐温。回头看到一间叫做“疯狂龙虾”的饭店,想想也该吃晚饭了,就进门坐下,窗外是懒熊般的密西西比河。

IMG_2007 吃完了晚饭 shrimp pasta,继续瞎游荡,转过街角,看到了有轨电车,和在三藩看过的“叮当车”有点像,但是这个是有辫子天线的。

IMG_2011 看它停在那里老也不走,我就跑过去,跳上了车,不知道这车是开往什么地方的,也不知道我现在离住的旅馆有多远。

IMG_2012 木质的内部结构,很南方,上车需要一元二角五分,比三藩的叮当车便宜很多,虽然叮当车大家都逃票。这样的电车开得很慢,慢慢悠悠,慢慢悠悠,也像一只懒熊,开出了几个街区以后,灯火阑珊,担心跑得太远,所以就从后门跳下,仔细看了街道,中间是有轨电车的通路,两边分别是车道,街对过一片低矮的房子后面,隐约透露着喧哗,大概就是 French Quarter 吧,本来想过去看看,但是时间也不早了,就作罢折回。路过无数的便利店,想买些果汁回去,发现新奥尔良连 CVS, Walgreen 都卖酒,并且卖酒的同时不卖纸盒果汁,最后只好买了调鸡尾酒用的柚子汁。

街上是不是有警车闪烁着红蓝的光彩,但是不鸣警笛,这点儿很好,不吵。

顺着小街(地图上看不是小街,St Charles Ave ,但是实际上确实是小街)走回旅馆,幽暗的街道中一个穿着草绿色夹克的黑人问我要 change,我莫名其妙的对他说了一句 Good Day,然后擦肩而过。

Blog分类: 

残荷·昼暖·铁门槛

(重新开始用标志性的三段体:》)。重翻李商隐的诗集,读到〖宿骆氏亭寄怀崔雍崔衮〗:

竹坞无尘水槛清,相思迢递隔重城。
秋阴不散霜飞晚,留得枯荷听雨声。

这才意识到一个问题,诗的末句和《红楼梦》中所引用的不同:

宝玉道:“这些破荷叶可恨,怎么还不叫人来拔去。”…… 林黛玉道:“我最不喜欢李义山的诗,只喜他这一句:‘留得残荷听雨声’。偏你们又不留着残荷了。”宝玉道:“果然好句,以后咱们就别叫人拔去了。”

曹雪芹引错了一个字,把“枯”字写作了“残”字。

当然,老曹引错字倒也不稀罕。俞平伯的《红楼心解》中提到了两处更重要的“错引”诗句。一是把陆游的“花气袭人知骤暖”郑重其事错引为“花气袭人知昼暖”,二是把范成大的“纵有千年铁门限”大张旗鼓的错引为“纵有千年铁门槛”。前者郑重其事,是因为书中这句引用出现过两次,其中一次是宝玉郑重回答贾政问题是认认真真引出的;后者大张旗鼓,是因为书中着重强调“古人中自汉晋五代唐宋以来皆无好诗,只有两句好”,但是还把这句引错了。所以俞平伯认为曹雪芹有可能是故意的,也不无道理,特别是第二个“铁门槛”。而第一处强调“昼”似乎也是另有深意,毕竟花袭人只是在贾家如日中天的时候才“暖”,贾家破落后,就另嫁蒋玉菡了。

可是前面提到的“枯荷”与“残荷”俞平伯却没有任何的解释,也许是他觉得不值一提吧,但是仔细吟读,却发现“枯”与“残”之差别,使得两句诗的意味迥然不同,细想,大概是留枯荷的是天,留残荷的是人吧:

秋霜未零,枯荷犹在,荷叶雨声,天若留以助相思之况味,盖清宵辗转,夜雨无眠,是寂寥的寄怀之意;

而人刻意的不除残荷,听其雨打零落,却是破败的迹象……

也许老曹此处果真也有他的深意,也许,只是他的错字:)

Blog分类: 

说说曹操墓

凑热闹说说最近新闻上提到的曹操墓。先澄清几个误解。首先,曹操没有疑冢,他的陵墓在他去世后很长一段时间是很明确的,并且他的陵墓曾经有地面建筑。虽然《三国志》上提到曹操的《终令》:“其规西门豹祠西原上为寿陵,因高为基,不封不树。” 但是根据《晋书·礼志》:“魏武葬高陵,有司依汉立陵上祭殿。”也就是说曹操下葬之后,陵墓上仍然像汉代帝陵一样,修建了园邑寝殿。直到黄初三年,魏文帝曹丕才又改变决定,毁掉了曹操陵墓上的建筑,他的诏书里说:

“先帝躬履节俭,遗诏省约。子以述父为孝,臣以系事为忠。古不墓祭,皆设于庙。高陵上殿皆毁坏,车马还厩,衣服藏府,以从先帝俭德之志。”(《晋书·礼志》)

虽然建筑毁掉了,但是陵园应该还存在,曹操并没有留下诏书让人隐藏自己的陵园,相反的,按照《文选》转引的《邺都故事》:

“魏武帝遗命诸子曰:‘吾死之后,葬於邺中西岗上,与西门豹祠相近,无藏金玉珠宝。馀香可分诸夫人,不命祭吾。妾与伎人,皆著铜雀台,台上施六尺床,下繐帐,朝晡上酒脯粻糒之属。每月朝十五,辄向帐前作伎。汝等时登台,望吾西陵墓田’”

曹操的陵园墓田在铜雀台上是可以看到的,也是因为这段故事,后人才有不少吟咏西陵(魏武帝高陵的别称)的诗句,譬如小谢的《铜雀台》。(不过估计会让曹操郁闷的是,后来苏小小的墓也被称为西陵,并且因为李贺,罗隐等人的诗,名气甚至大过了曹操的西陵。)

所以魏晋间,曹操的陵墓没有什么秘密可言,虽然陵墓上的建筑被魏文帝毁掉了,但是大致方位不会错,应该是在邺城以西。也是因此,新闻中提到多次的后赵大仆卿驸马都尉勃海赵安县鲁潜的墓志中才会明确提及魏武帝陵寝的位置,所以魏武帝陵墓大致的方位一直都是确定的,只是后来陵园荒芜,具体的位置才变得不为人知。

但是此处发现真的就是曹操墓么?

(以下是不负责任的猜测)

至少俺觉得有几处疑问。首先,这处陵墓的规模并不是很大,墓室的大小按照新闻上给出的数据和俺爹他们厂里施工挖出来的“曹魏正始八年墓”的规格相差不大(比如陵墓的长度都是三十多米,远远小于东汉的帝陵),正始八年墓肯定只是王公贵族级别的陵墓,难道魏武帝陵只和正始八年墓是一个级别?特别是他死后,陵墓的建筑并没有遵循他的遗愿,而是按照汉制修筑了园邑寝殿,很难想象地面的园寝只对应这样一座不甚宏大的地宫。并且魏武帝死时,东汉厚葬的风俗应该还很流行(汉天子即位,天下三分之一的贡赋充山陵),甚至到了魏文帝临死的时候,仍然担心子孙违背自己的遗愿厚葬自己而发毒誓:

“若违今诏,妄有所变改造施,吾为戮尸地下,戮而重戮,死而重死。臣子为蔑死君父,不忠不孝,使死者有知,将不福汝。”

魏文帝在黄初三年才毁魏武帝的寝殿,可见魏武帝下葬之时,丧葬的礼仪恐怕他无法太多的干预,估计他也是因为担心这样的事情再次发生,所以才说上面那段狠话。由此看来,新闻中所说的曹操墓在规制方面可能略显小了一些。

除此以外,高陵应该是卞太后和魏武帝的合葬陵,为何陵中出土的尸骨是一男二女?曹操对于诸夫人以及妾与伎人,并没有殉葬的遗诏(按照上文的记录,曹操对于诸夫人以及妾伎的安排还是很浪漫的)。

另外,曹操在《终令》中提及:

“周礼冢人掌公墓之地,凡诸侯居左右以前,卿大夫居后,汉制亦谓之陪陵。其公卿大臣列将有功者,宜陪寿陵,其广为兆域,使足相容。”

也就是说曹操是希望公卿大臣列将有功者死了之后陪陵,所以以现在有限的出土文字,也不能完全排除这是一座后来陪附的有功的大臣或者武将贵族的陵墓。刀和戟不过是曹操赏赐给墓主的 —— 当然这也只是证据不足的猜测。

Blog分类: 

The Doomsday Key

image

刚看完 James Rollins 的 The Doomsday Key。虽然很爱看 Techno-Thriller 这类的小说,但是是第一次读 James Rollins 的书。这类小说最出彩的部分往往是在序章,是否能提出一个吸引人的谜团至关重要,在这一点上,这本书作的很不错。我在 Amazon 提供的 Kindle 免费预览中看完了序章,就被吸引着看了下去。书的序章里提到了三件事情:第一,十一世纪时英国国王征服者威廉进行了一次全国普查,在这次普查中,一些村落被标注为“Wasted”,而这次普查的记录 The Domesday Book 后来也被称之为 The Doomsday Book; 第二,十二世纪时,爱尔兰有一位圣徒 Saint Malachy,他预言了从他的时代起到世界末日的所有的112个教皇,并且他的预言后来被证明是非常的准确。现任教皇是他预言中的第111位,也就是说,下一任教皇将是末日教皇;第三,从2006年到2008年,北美大陆的蜜蜂减少了1/3。这三件事之间的联系是什么?所以很容易就被吸引了。

说实话,小说开头部分看得挺失望的,首先是一开始就出现了梵蒂冈,让人以为这部小说不过是 Dan Brown 的一个廉价模仿品,其次是出现了特种部队,让人觉得非常的老套,所以丢下了一段时间,没有再看下去,后来无意间又往后翻了几页,这才再次被吸引,西非的屠杀,普林斯顿的枪击,以及罗马的追逐,总算有些精彩的部分,而在主人公设定上面,居然想日本卡通一样出现了经典的三角关系:英雄的男主人公(郁闷,如果是废柴类型的,可能会更有代入感一些,不过废柴无法完成后面的任务);温柔善良的意大利裔女主人公一号,以及冷酷的前杀手、法越混血的女主人公二号——这样的设定简直是《名侦探柯南》的翻版啊。

故事的主线情节就是找到避免世界末日的钥匙,整个故事的设定非常宏大,也存在一个类似《柯南》黑暗组织一样的犯罪集团(ft,怎么又想到《柯南》了),中间有些情节还是很引人入胜的,特别是沼泽地里保存完成的古尸身上的蘑菇——因为不能剧透,不妨想象一下,马王堆出土的女尸身上有一种不可思议的孢子病毒,多好的一个故事情节啊!

当然,唯一稍感遗憾的是这个黑暗组织的能量太大了,竟然敢在罗马的街头用武装直升机射导弹追杀男女主人公,虽然读起来很好莱坞,但是实在不可思议,欧洲没有航空管制的么?(很多人都听过北京的哥讲过那个滑伞滑到天安门广场的故事吧,最近才知道,那个竟然是真的)。不过,故事最后的包袱抖还算不错,恐怕所有人都不会想到古代那位近神的人是从哪里来的。

题外话,玩《文明》的时候,每当蒸汽机时代的军队打到青铜器时代的国家时,总有一种神的感觉,不过想一想,当一位知识丰富的殷商祭司阴差阳错的出现在蛮荒时代的日本,大约他也会当作神吧,呵呵,再说就剧透了:)

Blog分类: 

长平、邯郸之战的政治阴谋

看到讨论长平之战,想到的一点儿有趣的东西,事关长平、邯郸之战背后秦国内部政治阴谋。长平、邯郸之战的细节就不说了,简单的时间顺序是长平之战,赵败,白起想乘胜灭赵,范雎反对,允许赵割六城以和,秦罢兵,赵拒绝割六城,于是秦又起兵围邯郸,战不利,后信陵君虎符救赵,秦军败,解邯郸之围。作为战国后期秦国一次重大的失败,邯郸之战与信陵君虎符救赵一直被人们津津乐道,但是秦国真的是在军事上失败了么?

《史记·秦本纪》上对于邯郸之战之后的一则记录:“ 龁攻邯郸,不拔,去,还奔汾军。二月馀,攻晋军,斩首六千,晋、楚流死河二万人。攻汾城,即从唐拔宁新中,宁新中更名安阳。” 这则记录从表面上看确实有些令人糊涂,首先,明明秦军是败了,退回汾城,但是转身之间,居然又大败魏、楚联军,斩首六千,流死二万,并且进而攻占了魏国的宁新中;其次,当时汾城应该是在秦国手中,为什么王龁要去攻打汾城?

为了解释这个矛盾,杨宽在《战国史》里不得不更改上面的记录,认为“死”下疑脱“我”,“河”疑为“汾”之误,如果是这样的话,那么上面这句话的意思就变了,被“流死”的是秦军两万,而攻汾城的就是魏楚联军了,但是真的是这样么?

其实我觉得不一定需要这样的改动,王龁从邯郸围城起到退守汾城,他的一系列举动的目的都异常的一致,并且他的背后依稀有那位著名战神的影子。为什么说他目的一致?不妨看看自邯郸之战以后,秦国的损失是什么。邯郸解围之后,王龁的军队大部分全身而退,返回秦国进攻邯郸的大本营,秦国的河东郡治所汾城,但是秦军的主帅郑安平却被围困,不得不率领两万人投降赵国,这是秦军在邯郸之战中最大的损失。紧接着,魏、楚联军追击秦军到河东,但是却被秦军击溃(按照《史记》原文),而此时却有河东的军吏告发河东守王稽“与诸侯通”,结果王稽“坐法诛”。邯郸之战,秦军虽败,但是损失并不大,真正的损失有二,一是主帅郑安平被围降赵,二是河东守王稽坐与诸侯通。而这两件事都指向同一个人——秦国的丞相范雎。

郑安平与王稽都是范雎的恩人,也是他所保任引用的,按照秦国的法律,“任人而所任不善者,各以其罪罪之”。郑安平投敌,范雎罪当诛三族,但是由于他与秦昭王的交情,勉强躲过一难,但是王稽“与诸侯通”却给了范雎最后致命的一击。按照睡虎地秦简上的记录,王稽和范雎是同年被处死的。

而真正在幕后策划这一连串事件的,恐怕就是此时已经死去的白起,或者更准确的说,是秦国的军人集团。

按照时间顺序,把一系列的事件连贯起来。长平之战以后,以范雎为首的文官集团与以白起为首的军人集团在秦国的对外政策上发生了冲突,白起主张用武力灭赵,因为这对于军人集团是有利的,因为按照秦国的军功体系,如果顺利灭赵,会有不少军人受益;而范雎主张以政治以及外交的手段迫使赵国屈服,并且担心如果白起灭赵,他的地位必将在自己之上,因此他主张让赵国割地请和。冲突的第一次爆发是范雎劝说秦昭王杀了白起派往咸阳要求增加军粮的卫先生。在这第一回合较量中,范雎成功,白起罢兵,但是白起同时也留了一手,就是坑杀赵卒,其后果之一就是增加秦赵间的仇恨,为赵国在秦国退兵之后拒绝割地埋下伏笔。

紧接着,赵国如白起所愿,拒绝割六城,范雎的计划落空,不得不再起兵围邯郸,白起拒不合作,甚至有可能利用自己在军中的势力,阻碍攻赵,秦军虽然以王龁更换王陵,但是仍未有进展——而秦军的失利正是范雎错误的佐证,按照白起的观点,是范雎耽误了灭赵的时机。为了加强对于攻赵秦军的控制,范雎让自己的知交郑安平取代王龁担任了秦军的主帅,并且安排另外一位知交王稽坐镇河东,负责攻赵秦军的后勤保障 —— 但是这样却正中白起(或者军人集团)的下怀。因为此时,即便是秦军落败,追究其责任来也是在郑安平那里,并且可以以此累及范雎。

于是借着魏国信陵君出兵的机会,秦军成功“败退“,但是却把郑安平留给赵国,郑安平无论是败还是降都是大罪,因为他是主帅;而王龁在带领秦军退回汾城之后,他就没有理由再败了,所以他展示了秦军的实力,两败魏楚。至于他为什么攻打秦国的汾城:因为坐镇汾城的河东守正是范雎保荐的王稽,“传闻“说他要据城谋反,攻打他也在情理之中(王稽若是抵抗,就坐实了谋反的罪名;若是不抵抗,落入了军人的手中,还怕他不承认谋反么?)

可惜的是这场斗争中没有赢家,白起在郑安平投敌之后随即被杀;王稽坐诛后,范雎也被杀。而秦国则失去了最好的文臣与武将,以至于统一的步伐被推后了几十年。

Blog分类: 

曼哈顿打球记

IMAG0260LD 突然很想打乒乓球,所以我负责从附近找出一间乒乓球馆来。Google Maps 确实很有用处,只是整个 NYC 区域有乒乓球馆的地方屈指可数,离家比较近的就更少了。呵呵,还是在学校好啊,Norris Center 的乒乓球室一直开到凌晨两点…… 后来找到的在 Broadway 上这家交通很方便,另外在 Chinatown 附近,玩完了吃饭也方便,在 Google Maps 上记下了地址,换成地铁过去,但是真正到了那个门牌号,却任何乒乓球馆的标识都看不到,只有一家体育用品商店和一栋公寓,记得乒乓球馆的网站上说它是在 lower level 就钻进了那栋公寓,猜想大概会是在地下室。公寓的地板是黑白的格子,让然想到了很久以前的“四海旅馆”。进了电梯,重重的摁下“B” 但是电梯却不向下走,只好又出来,沿着灯光昏暗的公寓走廊向深处走去,希望能发现楼梯。

果然有一个楼梯(废话)。推开陈旧的楼梯间大门,明灭不定的灯光,阴冷中一阵霉味,正在犹豫是不是要下去,这时听到楼下“乒乓”的动静,才确认没有走错地方,是一间地下室改造的乒乓球馆,倒也挺宽敞的,有八九张乒乓球台,设施虽然陈旧但是齐全,一张乒乓球台每小时 18$ ,又怀念起 Norris Center 2$ 一小时的美好时光了。

不管怎样,还是和 LD 一起挥起了久违的球拍,其实两个人打得都不是很好,我虽然一直吹牛原来在大学的时候和同学合作一起拿过学校乒乓球双打比赛的亚军,但是没有坦白的是一共参加双打的只有8对选手,而我们在决赛前遭遇的两对选手都因为忘记了比赛时间而被取消了比赛资格(因为比赛的时候正好是学校食堂晚饭的时候),所以我和我的伙伴没有打一场比赛就进入了决赛,然后完败给了一对准专业选手 …… 玩得确实挺高兴的,就是地下室的空气有些浑浊,早知道去另外一间乒乓球馆可能好一些,那一家是在地上。

两个人大汗淋漓,最终的一点小遗憾是没有找到一台“慷慨”的咖啡贩售机,原来在学校的时候就有这么一台,插卡进去的时候,有时它会请你喝免费咖啡(当然,实际上是咖啡机故障):)

Free Tags: 
Blog分类: 

收到 Google Wave 的邀请

image

收到 Google Wave 的邀请了,先前看过它的一些介绍,大致就是一个协作工具吧,但是现在还没找到什么可以协作的东西,也没有太多的朋友有 Wave,所以也无法进行太多的测试。收到 Wave 邀请的同时,还得到 8 个再邀请的名额,如果还有谁感兴趣,告诉我你的 gmail,可以转发给你。

Free Tags: 
Blog分类: 

开源软件的苦与乐

开源软件的一点感想,不过不是说 Drupal (当然 Drupal 作为开源软件的一种也有同样的问题),而是 R。原本只做数学分析模型,不做统计计量模型,但是无数的 reviewer 都说: 证据呢?好吧,作计量,但是简单的计量回归已经无法满足“人民群众日益增长的复杂要求”,所以做数值模拟,做蒙特卡洛,用到 R,虽然以前没怎么用过,但是编程语言都有相通之处,譬如和 Excel 里的 VBA 相比, loop 或者 flow control 的结构基本相同(除了不用写 end if 或者 next i,略省些力气),再就是把 Cells (i, j) 换成 Mat[i, j] (总之只要把一个 spread sheet 看成一个 matrix,基本的思路都是一样,当然 R 可以直接进行 vector 运算,譬如 elseif,这个要方便很多),做模拟和矩阵运算,R 的效率都很不错,code 也简单,譬如重复 probit 估测一千次,R 里面不过几行代码,不到一分钟的运算,这点比以前常用的 Stata 要好很多 —— 这是开源软件灵活性的好处。

但是作一些简单的操作,却又凸现了开源软件的协调问题 (coordination problem)。举个最简单的例子,在 panel data 里生成 lagged variable。这样的操作在 Stata 里只有一行指令:

gen lag_var=l.var

(当然你要先用 xt 设置好 panel data)。但是在 R 里面,尽管 time-series data 相关 package 里有定义好的 lagged variable 函数,但是在 panel data 相关的 package 里面却没有,因此如果想完成这样一个简单的操作,必须写一个复杂的函数,把需要 lag 的 variable 从panel data 的 data.frame  里按照unit抽出来,设置为 time-series data,然后生成 lagged variable, 再用 cbind 合并回去,然后用 by 按照不同的 unit,再用 rbind 把各个 unit 的生成的 row 合并回去,然后 do.call 。

如果作 dynlm 和作 plm package的人能合作一下,统一做一个根据数据类型生成 lagged variable 的函数岂不是很方便( Stata 里的 laggged variable 指令是同时适用于 time-series data 和 panel-data 的)——也许这就是商业软件的好处吧,至少相互协调的很好。

当然这还不是最麻烦的地方。最麻烦的问题在于开源软件给了你灵活性的同时,也要求你很多东西要 DIY,虽然有很多现成的 package ,但是这些 package 都是大家自愿贡献的,所以不可能要求他非常的全面,当你需要一些 package 里没有的东西的时候,就不得不自己动手了,譬如想对 panel data 作一下 fixed effects poisson/negative binomial regression, plm package 里没有,其他任何的 package 中也没有找到,自己写? 虽然这在 Stata 里只是 xtpoisson / xtnbreg 这么简单,虽然这在技术上也不算太高深(Wooldridge 那本关于 panel data的教科书里有算法),但是从头开始写起恐怕没有一个星期是弄不完,并且问题在于我只是一个打酱油的 –,- … …

结论:开源软件固然好,商业软件离不了:)

Blog分类: