欧洲历史的简单刻度尺——《你一定爱读的极简欧洲史》

 这本书是澳洲的历史教授John Hirst写的一本历史课本,本意是让学生了解欧洲文明,因为他认为澳大利亚是欧洲文明的一部分。虽然是一本历史课本,但是读起来妙趣横生,令人不得不佩服作者的写作功力。
在第一章里面作者就坦率地表达了他的立场:一个欧洲(西欧)中心主义者。我这样说固然有给作者扣帽子的嫌疑,所以我可以换一种说法,在第一章开头作者开门见山地说欧洲文明”一直是唯一能让世界其他地区马首是瞻的文明“。可以这样说,作者是认为欧洲文明是现代人类文明的中心。这个立场和观点值得商榷,也可以商榷。在历史研究乃至于对人类社会中的复杂现象,几乎无法避免研究者的不同立场。事实上正是因为不同立场的存在,才有求得共识的需要:如果大家立场观点都一致了,那就无所谓取得共识可言了。至于能否取得共识,取决于研究者表达观点、准备论证材料的能力。
在这一点上,足见作者笔底不凡。欧洲文明数千年的历史,无数的兴衰存亡、碰撞融合,史料和研究如同波涛汹涌的大海,除了善泳者外的人见此,大抵只能望洋兴叹而止步与沙滩之上观潮。作者能在此纷繁复杂的材料中,整理出一条脉络,其裁剪熔炼之功可称不凡,加之表达观点时,简洁明快,条理分明,读者可以毫不费力地跟随作者的思路,了解欧洲文明的起源和发展。
一直以来我在阅读外国的历史书的时候,都常有摸不着头脑的感觉。这种感觉在读中国史书的时候是没有的。比方说读《晋书》《唐书》,里面忽然出现一个人的传记,但是还是可以读下。仔细考量背后的原因,我认为原因是这样的:人通常是不能孤立地认识一个事物的,我们需要将不同的事物联系起来才能形成对它的看法。在历史书中,我们往往可以通过时间、地点还有人物来将历史事件联系在一起。值得注意的是,我们对此三者的掌握并不需要十分精确,只需要有一个粗略的了解,就足以粗略地定位一个历史事件。通过这样的定位方法,我们可以比较容易地建立起事件之间关联的网络,从而对整个历史发展有一个大略的认识。但是外国的历史则不然。我对于外国历史的政治兴替、地理位置乃至人物的传承,始终不如对中国历史熟悉,时间-地理-人物坐标网难以建立,所以在阅读外国历史的时候常常遇到障碍。
从这一点来看,这本书最有价值的内容当在作者总结的三个图表中:从奥古斯都到神圣罗马帝国灭亡的罗马帝国大事表(见下图)、日耳曼-基督教-希腊罗马文明相互影响以及其后来的发展图表以及欧洲语言分布图。

 

 

这些图表(当然包括叙述论证这些图表的内容),为我们提供了一把虽然粗糙但是方便携带的刻度尺,便于我们阅读其他西欧历史书的时候使用。

最后吐槽一句,其实这个名字翻译得不好,一股地摊味。

读书笔记 Comments(0) 2014年9月27日 01:59

今天做的事情

最近在实验室的服务器上部署了一个系统,这个系统是美国人开发的,当然不考虑中文问题(其实我也不考虑,大家做科研的,不用英文,过意得去么?)。但这个系统是要面向广大社会主义劳动人民的,所以要有中文支持。

老大测试的时候,说数据导入的时候,中文无法显示啊!约翰霍普金斯那边能正常显示啊!于是跑去看人家的主页,擦,版本不同。回头在自己的电脑上面部署了一个最新版。再测试,问题变成了乱码了。

其实,乱码总比无码好嘛!

因为伟大的防火墙的缘故,google很慢,所以老衲直接杀入去看源代码了。最后定位到一个函数,这个函数是将上传的数据文件整理成一个array的。里面用了一个函数utf8_encode,我嘟你啊!那根本不是中文编码好吗!于是把这个函数注释掉了,再测试。不对,没有变化,这乱码怎么还是一个德行?

所以昨天一直就在纠结这个问题,甚至我还亲自写了一点php代码(实验证明我的想法是对的!)乱码就是这个函数的错!

当然,在世界杯决赛之夜之后(我没看,我都在刷《安珀志》),我忽然发现了一个问题:我用的数据文件好像有点问题,它不是用逗号间隔的(默认是这种格式),而是用制表符分隔的,我只处理逗号分隔那部分的代码,没有处理制表符那部分。

于是,重新修改代码。OK,中文完美显示。

愉快又得意洋洋地发了邮件给老师们还有帮忙做测试的师妹。

回头把新版本的系统部署在实验室服务器上,部署完之后一测试,(╯‵□′)╯︵┻━┻!居然还是无法显示中文字符!

这叫神马!夙兴夜寐枉徒劳啊!

这不应该啊!!!!(╯‵□′)╯︵┻━┻!

冷静下来之后,比较一下我的系统和实验室服务器系统的区别,虽然实验室服务器上的系统是可以判反人类罪的CentOS,但是我还是不愿把问题归罪于它。

然后我发现,我自己机子上的php的版本比实验室服务器上的版本要新哦!

所以,死马当活马医,我动手升级php。

这个,如果因为升级而导致整个系统崩溃,那自然神作了。

不过,试问,如果真的崩溃了,我何来时间在这里写blog?

不但没有崩溃,而且问题解决了。

最后,把结果告诉老大和师妹之后,觉得在师妹面前的形象顿时高达了。

这个故事给我们的启示是:

1.#php是最好的语言!#

2.如果有一天,有人能把所有语言的编码统一起来,那么,Ta至少值十个诺贝尔奖和一本现代汉语词典中对人褒奖的词语。

IT技术 Comments(5) 2014年7月14日 04:00

集市与教堂丛谈(零)

我昨晚开始读《大教堂与集市》,现在读了《黑客圈简史》和《大教堂与集市》中的一部分。

相比起Steven Levy的《黑客》,Raymond这里的《黑客圈简史》实在是太简单了,没有什么八卦好讲。大众对黑客的误解来自上个世纪80年代,记者对一系列计算机破坏事件的报道,大宗以为黑客就是那些没事就破坏一下系统的人——不得不说,虽然这是一个误解,但是听起来还是很酷,而且有一种叛逆的英雄形象,所以虽然当年的记者(或许还有很多现在的记者)误用了黑客这个词,但是很多年轻人还是受到鼓舞,梦想成为一个黑客(至于他们想成为真正的黑客还是那种专门入侵系统的黑客,那就天知道了)。

这篇文章提到,当年也有一群黑客围绕在MS-DOS下,但他们并没有形成一种文化。而“Linux最重要的特点不是技术上的,而是社会学上的”。这个观点很重要。很多问题是因文化而起,但是文化是一个复杂的概念,你甚至说不清什么是文化。但是我们都很清楚,所谓人以群分,人会因为文化上的相近而接近形成圈子。很多事情的成败在于能不能聚集到一群人,为一个目标努力。

其实很难解释为什么最后*nix下的一群人形成了一个稳定的社区,而DOS下面没有(至少没有形成一个很有声势的社区)。要讨论这个问题,需要社会学、心理学等一堆知识。传统会由社区传承,风气会由社区传播。在这种力量之下,我们在选择工具的时候会有两种非技术性因素影响我们的决策:历史惯性和文化影响。而这两个因素也是互相影响的,比如一个少年(例如我),放弃IDE,跑去用Emacs,很有可能不是因为他真的觉得Emacs好用,只是他觉得用Emacs很酷很Geek。而他之所以这样想,是因为以前用Emacs的人真的有很酷很Geek的人。

其实在看待开源与闭源这个问题上面,我跟Raymond的角度是很不一样的。他是集市中的商人,努力使市场繁荣。而我是集市中的顾客,上教堂听布道的信众——我只是来满足我自己的需求。其实很多人都是这样,他们的区别在于需求的不同。我们其实不是Raymond期待的那种会给他反馈并且帮助改进项目质量的用户。Raymond并不是反对商业化的,在这里讨论的教堂和集市,实际上是指软件开发过程中的管理模式。他认为“未来软件产业的经济关键是服务价值”。这个观点在他后面的文章还会讨论,我读到的时候再来探讨这个观点。Raymond是一个务实的人,他清楚地认识到,成功并不取决于“开源是道德正确的”而“闭源是道德不正确的”,开源与闭源的斗争不是这种道德伦理的问题,而是一种效率的问题。Linus开创的这种开发模式的高效秘诀在于:一个小巧的核心团队与外围的用户松散地联系在一起。这节省了团队交流的成本。而开发过程中,偏偏就是团队交流耗费最多。

对于我而言,开源和闭源的区别也不大,我会根据需求来选择我需要的工具。当然由于习惯我会更加倾向于使用开源的工具。但我并不排斥闭源工具。世界这么大,容得下不同的理念。

P.S:不成系统的随机吐槽

1.Unix刚出来的时候,是被ITS那群黑客鄙视的,原因就是:太简单了。

2.“开发者社区从成立伊始,就需要一个可以运行和测试的东西。”当时读到这一句的时候,我就把开源和众筹联系起来了,或者下次可以聊聊这个。

3.“聪明的数据结构配上愚笨的代码,远比反过来要好得多。”说得倒是轻巧,但实际设计数据结构还是蛮难的。

4.在文中,Raymond提到“Linus最聪明和最有价值的成就其实不是构建出一个Linux内核,而是他发明的这种开发模式”。这是很有卓见的。发明一种能让别人更好地发挥才能的模式也是一项了不起的成就,而且这种成就往往会被低估。

读书笔记 Comments(0) 2014年7月02日 06:06

《死神永生》——虽然失败但不能放弃的努力

作为《地球往事》的第三部,《死神永生》既说明了目前刘慈欣能力的极限,也说明了他求新求突破的努力。在前两部讲了精彩的故事,反思了人类与人类、人类与科学之间的关系之后,刘慈欣希望在这第三部更深入地探讨人性等问题。考虑到故事在后半程的乏力,他的尝试无疑是失败的。但正如在小说中程心停掉曲率飞船研究断掉人类最后的生路一样,如果因为可能是失败而不去尝试新的出路的话,那我们就彻底输了。

这本小说还有一个问题就是对程心塑造的失败。这种失败可以说继承并发扬了对庄颜的塑造失败。庄颜的剧情,基本上可以说是删去也无影响的。而程心的失败在于:这是一个失败的人物而且还不能把她的戏份删去。探讨这种失败的原因当然可以批判大刘的男性中心视角。从第一部到第三部,男性几乎都是以正面的形象出现,一个中性化的世界都被大刘讽刺一番。据说《三体》就要出英文版了,不知道会不会被女性主义者围剿。当然还可以说,其实大刘自己对于他要探讨的问题,也没有想清楚。大概他心里面并不认同程心的想法,但是又没有别的出路,所以只能让程心一次次犯错,再让她幸运地活下去。

上面说了那么多,无非是爱之深责之切。《三体III》虽然在故事上有一些缺陷,但是依然是一部很不错的小说。二向箔这种东西我就想不出来(我想象宇宙战争的水平大概跟漫威DC的编剧差不多,最高水平大概是互相扔黑洞)。目前好像《三体》对中国科幻的影响还不大(还是说,还没有凸显?),希望它不要成为一部孤立的好作品。

读书笔记 Comments(0) 2014年5月30日 17:20

北京R语言会议纪要

有幸参加了今年R语言会议,十年之后,我再一次来到帝都。不愧是北京的大学,人大的建筑一看就很大气!

这次R会盛况空前,演讲那么多,第二天还开了分会场,所以肯定是听不完的,加上我很担心第二天的讲座,所以我只认真听了部分的讲座(罪过罪过)。所以我只选择我印象深刻的内容讲一下。

1. Hadley Wickham : 我居然几乎全部听懂了Hadley说什么!大概因为我也做一点R开发的缘故吧。惭愧的是,听到这个讲座我才知道devtools这个包是他写的,而且我也没有用过。我就是那种用pakage.skeleton()做一个空包然后自己把代码填进去的人。有好用的工具一定要用,往节省人力的资源方向去才是正道啊!最后Hadley还吐槽了一番CRAN,怨念太深了!

2. David Smith : 他一上台先试拍了一张观众的照片,然后以观众为背景自拍了一张,好萌啊!不过他说的内容我没有怎么听懂。

3. 余凯:虽然我最近一直听说Deep learning,但直到现在还没有谁跟我认真地分析过“什么是Deep learning”,看来还是要读论文。

4. 周明:用计算机去做对联和绝句。老实说,我觉得这种思路是错的,但很不好意思,我想不到好的思路。但是我觉得诗词不是选择一个概率大的字词,而是选择一个最好的字词。这种事情,目前人工智能做不到。不过要是计算机能做到帮我完成各种应用文(包括申请书和给那些跟我不熟悉的上级的信件)那该多好!我觉得这个方向才是正路。

5. 王汉生:王老师也是非常萌的一个人,可惜我不做社交网络。统计基础也差,实在没有听懂(请轻揍)

下午是金融专场,这种高富帅领域好像真不适合我(说真的,经济学和金融的东西我真的读不下去,不知道是智商还是兴趣原因,希望是后者吧),不过腾讯工程师说的并行矩阵分解工具真的很厉害,可惜不开源就是了。后来我溜出去找当年睡在我下铺的兄弟福哥。感谢他带领我游览清华,还让我结识了另一个学霸飞哥。他们学电力的往往都是在实验室待到十一二点,实在让老衲惭愧啊!

第二天分了几个专场,所以不可能全部听完。

我先试在A场听。

6. James Wicker : 他做的工作和我师兄的工作有点相同,就是要分辨到底一堆样本中,包含了多少种分布,怎样把这些分布分辨出来。我觉得这个方向还挺有意思的:你可以将很多事情的发生看做很多因素的结果,每个因素对应一个概率分布,要是能把这些概率分辨出来,你就把这些因素理清楚了。当然这个问题很难,而且我还没入门。回头看看论文去。

其他的讲座我基本都忽略了,因为我下午要上台,非常紧张!

7. 任坤:任坤师兄的pipeR真的是一个很有用的包,尤其是像我这种经常要做数据清洗的人来说,这种管道符操作的方式很实用。

8. 邱怡轩:轩哥将SVD,深入浅出。他说的用SVD做矩阵补全,开了我的眼界,准备回头就用这种思路去做一下Kaggle最近的比赛。

总的来说,印象深刻的就是这几场演讲了。第二天分了三个会场,有些很想听的内容时间都冲突了,真是可惜。

 

R会以外的八卦:

1. 没想到南下和北上的高铁车型是不同的,回广州的车不同于去北京的车,热水间里面没有一次性纸杯,所以只好买了一瓶高铁上的矿泉水。

2. 高铁上冷气比较足,去的时候我是抱着带去换洗的衣服取暖的。回来的时候干脆一发狠,掏出电脑算个比较大的kmeans,让发热的电脑成为我的暖炉(何等码农做派!),回去路上不断看窗外,北方民居和南方民居真的有很大不同啊。那种平原景象很吸引我。

3.路上还看完了英文字幕的《处刑人》。

4.我爸问我,北京比起04年,有什么变化。我说,就只有地铁要安检这个变化,问了其他人,说,也就空气污染更严重了吧。

R语言 Comments(72) 2014年5月27日 07:03

五一假期的阅读和想法

因为最近一个月都睡得不是很好,所以五一回了一趟家。我的室友和我实验室的朋友在打乒乓球的时候说起这件事,觉得一向不喜欢回家的我居然回家了,实在可疑,最后他们推理的结果是我是被迫回家相亲。真是好推理。

说起来,我确实不喜欢回罗定。这次回家的时候,我也想了一下。除了交通这个因素之外,我觉得最大的不适应在于人际关系的构建。

虽在18岁之前,我一直都是在罗定生活,但其实更准确地说,在我五年级之后,我主要生活在罗定的学校里面,算来有八年,我是在学校里面成长的。我更习惯学校这种环境。如果让我概括我的人际关系,特点大概如下:1.这个圈子很稳定;2.我对这个圈子之外的人关注很少;3.即使进入我的交际圈,我们依然需要双方大量的互动来拉近心理距离;4.在我的交际圈内,还可以进一步划分圈子,这些圈子之间的交集不多。这只是我个人的情况,我不知道有没有一般性。但明显这种情况跟我父母的不同,很明显的两点是:1.他们对不是自己圈子的人依然有很大兴趣(或者说他们的交际圈子太广了),我很难理解我爸居然认识我妈同事的亲戚这种事情,也很难理解他居然知道我小学的老师结了三次婚,而且还大致知道结婚对象的情况;2.即使是没有多大交际的人,他们见面都能营造一种相交已久的感觉,我不行,即使是已经互相认识的人,我都难以保证我们之间相处的时候不冷场。

这种差异,我觉得也造成了我们生活思维的不同。我认为我父母的生活是建立在一种“熟人思维”上,而我建立在一种“陌生人思维”上(估计在相关的研究领域上,应该有专门的概念来描述)。他们认识他们买肉的肉贩(虽然不一定知道他们的名字),有他们的电话。而我通常就是随便找个地方买东西。当然,也有可能是我还没有在一个地方定居。这种熟人关系需要定居才能建立吧!

回家这段时间,看了《牛津通识读本:克尔凯郭尔》的一部分,本来以为是他的传记,没想到是他的哲学思想简介,因为还涉及到康德、黑格尔等人的思想,所以读了一阵之后,痛苦地发现其实我没有读懂,哲学实在不是我的菜(还有经济和金融)。然后又读了鲁迅的《二心集》,也不是容易读的。迅哥儿嘴炮毒辣,不过我觉得编辑他的杂文集,应该把当年其他人跟他对战的文章也收录进来,这样才精彩。最后实在没有办法,看他的《随想录》,这部分文章,平和很多,独立性很强,所以更容易读进去。

回来的是路上,我读了两期的《码农》(这么好的杂志居然是免费的,所以说,程序员就是实惠啊)。有几篇文章我觉得很有启发。

《为什么Pinterest是最让人失望的社交网络》,这篇文章当中有一句话:它引导甚至鼓励社交网络上最令人失望的一些动机——它从其他富有创意的网站上抽取内容,但却不回馈任何东西。一个良性的环境,应该是收益的人反馈环境,然后环境变得更好,再让更多的人得到更多的收益。读完之后我也决定要做一些有益的反馈工作。我之前在微薄上读到一个SAS论坛上的同学,希望收集论文常用的图,然后用SAS画出来,并提供代码。我决定把这件事情用R(主要是用ggplot2做一遍),github地址是:统计绘图  。不过直到我写下这段东西的时候我还不知道画什么图比较好。所以,还是一个空白的项目。回头找经常画图做分析的师妹聊一下这个问题。

《别把自己当个超人》,这篇文章说是给初级程序员的建议,但更多是给一个在团队中的老手(更有经验,未必是更有才能)的建议:如何让新加入团队的成员更快熟悉工作思路。看完之后我觉得我让师妹自己去读文档这种做法不是好方法。我应该给她更多的指引。于是我在路上打起了给师妹的腹稿。

五一之前我的毛病是晚上睡不着,五一之后变成了:午睡起不来,悲伤啊。

随笔 Comments(5) 2014年5月07日 18:07

《费马大定理》书评

《费马大定理》是纪录片《地平线:费马大定理》的导演Simon Singh的作品。这本书从毕达哥拉斯开始,到Andrew Wiles最终完成他的证明为止,追溯了费马大定理的历史,叙述了它与现当代数学成就的联系。本书最值得阅读的部分是第五至第七章。

在我正式评论这本书的优点之前,请允许我斗胆批评这本书的缺点。Singh本人是核子物理博士出身,但本书写得不够“数学”。前面四章的内容稍嫌冗长,尤其是第一章。虽然我并非历史学家,但毕达哥拉斯所生活的年代既已久远,史料匮乏可想而知。而作者下笔如此笃定,未免视历史学家如无物了。

当然,这本书依然是一本引人入胜的科普书。在第五章之后,作者梳理了近现代数学与费马大定理的关系。这对所有只听过费马大定理之名的人都有所裨益。一个数学问题的重要性,有两方面的度量,一是问题本身:这个问题能否拓展这个学科的前景?另一个度量是解决这个问题能否带来新的工具/方法/思维?再容我斗胆地评论一句,费马大定理本身不是一个很重要的问题(和歌德巴赫猜想一样),但在它的求证,大大的扩展了数学。所以无论如何,它都是一个伟大的问题。

不过有点矛盾的是,如果不去求解一个问题,你不会知道求解这个问题的思路和方法。而对于费马大定理这个艰难的问题来说,求解它有一种现实的考量:花费一生的光阴求解一个可能无法解决的问题,这个问题甚至不是很重要,是否值得?根据本书,高斯和希尔伯特就有过这种考虑。所以我很敬畏Wiles。他10岁的时候接触了费马大定理,而后他能花10年时间,一个人征服了这个百年难题。将近7年时间他是把自己关起来,孤军奋战。

当然,Wiles似乎不需要太在意现实性的问题。因为第一,他在证明的过程中凭借自己在椭圆曲线的工作,成为了普林斯顿的终身教授;其次,我觉得他主要的目的还是想证明谷山-志村猜想。 谷山-志村猜想无疑是更为伟大的问题,它在模形式和椭圆曲线之间搭建起了一道桥梁,沟通了两个数学领域,描绘了数学大统一的美妙蓝图。尽管我数学水平太差,完全不了解模形式和椭圆曲线的研究内容,但是当我读到谷山和志村提出这个猜想的想法的时候,我还是震撼到了。实际上,Wiles的工作成就更应该被评价为“完成了谷山-志村猜想的初步证明”。费马大定理和谷山-志村猜想的联系是由别的数学家建立起来的。许多伟大的工作,成为其他伟大的工作的奠基石。尤其美妙的是,许多之前未能联系起来的部分都联系起来了:在Wiles刚开始博士生涯,研究椭圆曲线的时候,他不知道这与童年的梦想费马大定理能够联系起来;在谷山和志村之前,也没有人能想到模形式和椭圆曲线能联系在一起。当这一切相遇了,我们只能感叹其中的奇妙。

 

最后补充一点书中的八卦:

1. 根据本书,毕达哥拉斯娶了自己的学生,他的资助人的女儿为妻,不知这是不是最早的师生恋,可见学数学还是有好处的。

2.费马本人是标准人生赢家,本身出生在富商家庭,后来当上公务员,貌似还是挺重要的职务。而他的名言 Cuius rei demonstrationem mirabilem sane detext hanc margins exiguitas non caperet.(我有一个对这命题的十分美妙的证明,这里空白太小写不下),是在他死后,他儿子把他的藏书《算术》连同他的注释一起出版,所以才流传下来的,看来他去世之后,他家还是挺有钱的。

3.后来设立了关于费马大定理的奖项,很多人都写了相关的论文投稿到不同的大学。格丁顿大学的数学系主任就深受其害。后来他干脆印了卡片,上面写着“您的证明在第X页第X行出错了!”让学生把空填上寄回去。数学作家(这是啥头衔啊!)Martin Gardner 仿效了费马本人:我有一个证明反驳您的证明,可惜这张纸不够大,写不下了。他的朋友更绝:每次收到这种民科来信,他就介绍来信者去找寄信给他的上一个民科。由此看来,民科处处有,不独中国多。我以前在学校的网络中心干活的时候夜看过这种民科的信,里面还说他收到迫害了。

4.谷山和志村的友谊是在图书馆开始,当时志村想找一份期刊,而刚巧期刊被谷山借走了。美丽的友谊开始。

5.迦罗华16岁才开始第一门数学课程,无论他是否16岁才开始学习数学,考虑到他21岁逝世,他都是一个让我无地自容的存在。而且在他16岁之后的日子里面,他还很High地参与了各种政治活动。另外令我很意外的是,小仲马居然也遇见过他。有时候我看外国历史就觉得有些人是活在不同位面的,看见他们居然有交集,我会很惊奇。

6.其实,就算后来Wiles无法补上他的证明中的缺陷,他的成就也足够荣耀自身了,毕竟他在谷山-志村猜想中走了很大的一步。

读书笔记 Comments(3) 2014年4月27日 18:18

R中将多个变量赋予另外多个变量——一个脑残的方案

虽然很难理解为什么有这样的需求,但是我还是遇到过这样的要求:怎么把不同的结果保存到一系列按照某种规则命名的变量中。而且是不止一次遇到这种需求。

我觉得通过合理地安排编程逻辑,应该可以避免,但是无法避免的时候,还是有别的方法的:在R中,实用assign(x, value)语句。这样可以创建一个名为x(注意到x是一个字符串)的变量,并将value对应的值赋予它。

不过今天师妹给我带来了新的挑战(师妹真的是人类进步的动力啊!):如果需要将当前环境中名为a0~a9的变量中的一部分赋值给b0~b9的变量,那么,即使用assign也有一点难度。因为当师妹用如下代码的时候:

for(i in 0:9) {
    vname <- paste("a", i, sep="")
    assign(paste("b", i, sep=""), value=vname)
}

得到的结果是b1="a1"这样的结果,也就是说,我们把一个字符串赋值给b1了!

我给出的方法是用environment():

vars <- environment()
for(i in 0:9) {
    vname <- paste("a", i, sep="")
    assign(paste("b", i, sep=""), value=vars[[vname]])
}

嗯,任务完成!准备让师妹请我吃顿饭。

当然,在我敲下上面这句话的时候,我觉得,这种做法挺脑残的。首先这不是一种好的代码风格,然后,其实把a1~a9放在一个列表里面不就结了吗?

不过,还是很开心,因为估计能够坑来一顿饭,而且让我可以写一篇博客。

R语言 Comments(54) 2014年4月14日 00:33

猫与艺术家

从前,有一个艺术家,擅长蜡像。

他每天都出去,观察不同的人,然后回来造蜡像,造诸神的蜡像,但诸神带着人的表情——而且几乎都是烦恼痛苦的表情。

有一只猫,不喜欢这个艺术家。

有天,艺术家出去了。猫闯进艺术家的工作室,将所有蜡像烦恼的表情都改成了欢笑。

艺术家回来撞见了,非常生气,追着猫出去了,追到了诸神的领域。

诸神不喜欢艺术家很久了,他们拦下艺术家,押着他回到了他的工作室,没想到蜡像上都是欢笑。

于是诸神转怒为喜,开始和茫然的艺术家讨论生意。

而猫呢,干完恶作剧之后,在舒服地晒太阳,尾巴盘在身前。

 

P.S :我不是有心文艺的,但是我喜欢说故事。

再P.S:这是我前天的一个梦的内容,我在梦中看见类似加菲猫画风的漫画,画着这个故事,当然我润色了不少。我很希望我会画画。

故事集 Comments(3) 2014年4月02日 23:20

探索R中随机数(零)

下午师妹问我,如果在R中一次生成多个随机数,和在一个循环中生成的随机数,会有什么不同?

简单地做个实验:

set.seed(123)
runif(3)
set.seed(123)
for(i in 1:3) {
    print(runif(1))
}

两个输出的结果是一样的。无论是一次生成多个随机数,还是在一个循环中生成随机数,都是从一个种子出发,生成一个随机序列。如果初始的种子一样,那么生成的随机序列也是一样的。

从这里出发,开始探索一下R中随机数生成的原理。于是去看R中的源代码,在R 中直接输入runif得到的结果是:

> runif
function (n, min = 0, max = 1) 
.External(C_runif, n, min, max)
<bytecode: 0x9bd23a4>
<environment: namespace:stats>

.External调用C_runif,而C_runif其实是一个指向动态链接库的指针,并不是一个函数的名字(看C_runif没有带有引号可知,关于这一点可以参考stackoverflow上的一个讨论 )。在R的源代码下,可以在src/main/name.c中,找到对应runif的函数:do_random2,还可以看到do_random2对应了多种分布,通过一个偏移量(offset)来区分,接受三个参数。

于是,我们找到了runif的底层源码,至于这个源代码能告诉我们什么,有空再写。

R语言 Comments(1) 2014年4月02日 01:50