Mapping CRAN Mirrors using R

CRAN_mirrors_map
昨天突然想看一下怎么用maps包画地图, 就做了一个CRAN镜像的地理位置数据试了一下. 城市地理位置数据主要来自maps包中的数据集world.cities. 画图时用到了maps和tripack这两个包, maps用于呈现地图, 而tripack可以根据给定点坐标计算并绘制Voronoi图/Delaunay三角剖分. 相比主流的C或C++甚至Python下的实现, 在R中做这种事情可以说是简单无比了. 同时也要慨叹R的扩展性是如此之好. 不过目前R中和计算几何相关的包似乎不多, 据我所知还有rcdd(cddlib在R中的接口)和geometry. 比如geometry包, 可以计算n-维上的Delaunay三角形, 等等. 如果某天哪位大牛可以替最强的计算几何算法库CGAL在R中做一个接口就好了.

CRAN_Mirrors_Voronoi

Voronoi Diagram of CRAN Mirrors on World Map [PDF(Vector), 120KB]

CRAN_Mirrors_Delaunay

Delaunay Triangulation of CRAN Mirrors on World Map [PDF(Vector), 120KB]

从图中看, 多数CRAN镜像分布在沿海地区, 内陆较少, 也极不均匀. 西欧密集分布了约30个镜像, 面积是其几倍大小的东侧大片内陆只有寥寥3、4个镜像. 非洲、南美洲的情况大致相同. 北美的镜像分布呈现比较均匀的态势, 至少看上去比较稳定, 不多也不少.

Dataset & R Code [Gzip, 1,932 bytes]

有两个问题是不得不考虑的:

  1. 地球是椭球体, 在球面上绘制Delaunay三角和Voronoi图, 需要通过计算三维空间中的凸包来实现 .. 但考虑到事实上太平洋中间没有CRAN的镜像, 正好十分自然地将现有镜像隔得很远, 就无视这个了 ..
  2. CRAN镜像发挥的影响力与各地光缆铺设情况的关系更紧密, 这时用地理意义上的世界地图就显得略不给力了 .. 使用能够体现网络分布情况的”地图”才是正解.

Rdonlp2

Rdonlp2包是R中解决非线性规划问题的利器, 其约束条件可为线性的或非线性的. 使用它可以很轻松地求解NLP问题, 几乎是偷懒不想多码代码时的不二选择. Rdonlp2包实际上是Prof. Peter Spellucci的DONLP2在R环境下的一个包装, 但目前似乎Spellucci的主页上写着要求必须写封email才能取得DONLP2. 而Rdonlp2包的作者Ryuichi Tamura在更新到版本0.3-1后也不再公开放出此包的下载. 我在CRAN上翻遍, 一无所获. R-help上还有人说给R包作者发邮件杳无回音云云 .. (谁叫这包从CRAN撤下两年后仍然挂在CRAN Task Views的Optimization页面上呢) 后来, 俺无意中在Rmetrics项目的SVN trunk上找到了此包的源代码. 编译之, 发现由于年代久远, 这包对目前版本的R有点水土不服. 于是上CRAN下了一圈旧发行版, 从R 2.11.x依次递减版本号进行实验, 结论是能够正常运行此包的R最高版本为R 2.6.2.

R对于数据类型的检查随着其版本号的升高而更加严格, 在使用Rdonlp2包求解问题时, 从R 2.7.0版起将出现一个Warning:

Warning message:
In all(lapply(nlin, function(e) is.function(attr(e, “gr”)))) :
coercing argument of type ‘list’ to logical

从R 2.9.0版本开始,除了上面的Warning之外,还会出现一个Error:

Error in tryCatchList(expr, classes, parentenv, handlers) :
SET_VECTOR_ELT() can only be applied to a ‘list’, not a ‘character’

第一个问题源于donlp2.R第59行, 相对比较好解决; 第二个问题则源于Rdonlp2.c, 这文件大约600行吧. 因为我不懂C, 所以希望哪位大侠能够费心手工hack一下, 让它能够在较新的的R版本上正常跑起来. 这里我就偷个懒, 不做任何修改. 直接装个R 2.6.2就可以正常使用啦.

这里放上源码和自己编译的Rdonlp2包.

Package source:     Rdonlp2_0.3-1.tar.gz

Windows binary:     Rdonlp2_0.3-1.zip

编译环境: R 2.6.2 + RTools 2.7 + Win Server 2k3 DataCenter SP2

R 2.6.2下测试通过, 使用时无上述Error和Warning, 加载包时亦无”编译环境版本号高”的Warning.

Read The “Friendly” Manual: http://arumat.net/Rdonlp2/

请注意: DONLP2和Rdonlp2只能用于学习和研究, 商业用途需经作者授权.

放几句英文自勉.

The Six Tenets:

  1. Access to computers – and anything which might teach you something about the way the world works – should be unlimited and total. Always yield to the Hands-On imperative!
  2. All information should be free.
  3. Mistrust authority – promote decentralization.
  4. Hackers should be judged by their hacking, not bogus criteria such as degress, age, race, or position.
  5. You can create art and beauty on a computer.
  6. Computers can change your life for the better.

PKU Vis Summer School

viz_cran_package_network

Prof. Michael McGuffin的热心让人感动. 当Michael问我”… You want to visualize something?”而我只能巨汗地回答”Just want to learn the basic things well …”时, 我体会到以后还真是需要好好学一下计算几何了 .. Gary对大家都很有教益的Color Science .. 内敛的Patrignani的内敛的意式英语 .. 可爱老头Inselberg的极其无敌极其牛x闪闪的平行坐标 .. 周围低调的群牛 .. 都很值得回味. 感谢和我在同在一个group的Zhang, Wang, Chen三位同学, 你们优秀的想法给了我很多启发. :smile: 考虑到自己只是打酱油+纯路过的本质, 其他什么的就不多写了. 最后特别感谢高涛同学的友情食宿赞助. :wink:

Slides 1 – Group3: Plan(s)

Slides 2 – Final Presentation: Visualization of CRAN Package Dependency Network

最后的Name Cards偷了谢老大的创意 .. 脸红ing .. :oops:

原来暑假就要这么华丽丽的没了 …

开源的矢量图手绘工具:Ipe

说起绘图工具, 尤其是适合与TeX配合使用的示意图绘制工具, MetaPost和Asymptote都很强大, 只是二者画图时都需要垒点代码, MetaPost还略显古老, 有些方面设计得不够完善. 在绘制那些非数学图非统计图非流程图而精度要求又不是很高的示意图时, 寻找一个上手简单, 功能足够的矢量图绘制工具就显得很重要了. 画个小图用上AI/CorelDraw/Inkscape这些巨无霸似乎有些夸张, 而且我总是用不好这些软件里那个贝塞尔曲线工具 .. Google后也不会, 希望下次遇到个会用的人手把手教我一下 .. :oops:

ipe_tetracube

Ipe绘制的图形示例

今天试用了一些专门的绘图宏包(PSTricks/PGF/TikZ)和GUI的手绘工具(TpX/Ipe/MetaGraf/Jpgfdraw/LaTeXDraw), 个人感觉还是Ipe比较好用, 图形简约自然, 风格十分贴近MetaPost等经典工具, 可以直接导出EPS/PDF, 又能直接嵌入TeX字符和公式(利用了PDFLaTeX). 有这些功能, 我已经满足了. 一个小小的遗憾是Ipe没有那个LaTeXDraw自带的坐标轴和网格绘制功能, 但手工画一下好像也不是很难.

特别值得注意的是,Ipe是支持编写扩展的. 其扩展叫做Ipelets. 官方释出的版本中已经自带了一些比较实用的Ipelets, 比如绘制任意边数的正多边形, 画三角形内切/外接圆等等功能简单的Ipelets, 更有Delaunay三角剖分等等与计算几何中Voronoi图相关的比较专业的Ipelets. 更让我惊讶的是, Ipe还与优秀的计算几何算法库CGAL建立了联系: CGAL Ipelets提供了对CGAL算法库的访问, 而这些Ipelets现在已经是CGAL的一部分. 可以在研究计算几何时作为辅助工具玩玩.

ipelets

Ipe中自带的Ipelets

官方主页(The Ipe extensible drawing editor):

http://tclab.kaist.ac.kr/ipe/

部分第三方Ipelets:

http://tclab.kaist.ac.kr/ipe/ipelets.html

下面的页面有很多绘图示例(基本上都是物理情境示意图)可以作为参照练习使用:

http://melusine.eu.org/lab/ipe

Ipe的缺点是不能精确控制图形, 对于一些牵涉数学的图形和较为复杂的、涉及计算的图形十分乏力, 不过在要求比较低时快速作个图还是可以的. 下面是一份网友制作的完整文档, 《经典力学学习札记》, 全部图形使用Ipe绘制, 可以大致看一下效果(由于dropbox目前被ooxx, 国内无法访问).

http://dl.dropbox.com/u/4509593/Mech_tianyi/mech_tianyi.pdf

p.s. 我很喜欢这个文档的风格, 行气很足, 很漂亮. 只是Adobe的免费宋体还是显得略细了些.

The Big Bang

Fig 1. Stars

Fig 1. Stars

Fig 2. Seaweeds

Fig 2. Seaweeds

R中的igraph包在处理稍微大一点的数据集时显得乏力, 只好使用专门工具Pajek/Gephi助力.

贝吉塔哥哥去年的一张强图让我一直心向往之, 于是模仿了一个山寨版出来, 就是第一个图了, haha.

第二个图么, 隐约能看出CRAN上R包依赖关系的一个大概. stats/methods/MASS这3个包真的没什么遗憾了 ..

这么看来, “It all started with the big BANG”的说法还真是有点意思.

PDF Version Here.

Linux Mint 9 + MAC地址修改 + H3C iNode第三方客户端接入测试

一个多月没更新了, 无奈期末突击忙. 丢上来一篇没什么技术含量的.

发这篇博文时, 遇到了一个很无语的问题, 预览不能, 草稿不能保存, 反复提示HTTP 501 Method Not Implemented, 不能以GET方式访问post.php, Google一番后发现原来是因为主机的Apache启用了mod_security所致, 不能发表含有某些关键词的文章, 无语.

这个破烂规则就在这儿, 有兴趣的可以看看.

用了这rule以后是避免webshell了, 可是大大的影响到用户体验了 .. 所以拜此mod所赐, 本文有一句英文命令是用全角打出来的, 使用时不要直接复制, 手动打一下. 而这个关键词, 大约就是/etc/之流.

由于Linux Mint 9 “Isadora”基于Ubuntu 10.04制作而成, 故本文所述亦适用于Ubuntu 10.04 LTS (Lucid Lynx).

我所在的铁道校区的校园网很bt, 上网时需要使用一个叫做H3C iNode客户端进行802.1x认证, 学校又在Server端绑定了客户机的MAC地址, 而我要使用另外一台只装了Linux Mint的台式机上网, 所以简单地把认证的过程记录一下, 也让后来的同学少走些弯路.

本文假设这台暂时无法上网的机器网卡原有的MAC地址为00:11:22:33:44:55, 可以进行认证上网的网卡MAC地址为AA:BB:CC:DD:EE:FF.

继续阅读’Linux Mint 9 + MAC地址修改 + H3C iNode第三方客户端接入测试’