yihui tctcab Cloud2016 谢谢各位的建议!大家如此热情,我这就找时间去改。
sinx......哈哈哈,挠到我的痒痒了。或者叫 fortunes2?sinx 理解起来有点曲折吧。不过如果大家觉得好玩也无所谓。以后可以继续开发姊妹篇 tanx,ctanx......
代码里确实问题很多,我来说说他们是怎么来的。
- 本来我没打算复制 fortunes代码的。因为
fortunes::fortune()
函数本身的设计是可以支持导入自定义语录文件的,所以照理说只需做个新的 .csv 文件就行了,根本用不着写个新包。然而可惜的是,fortunes::read.fortunes()
里使用 read.table()
函数时没有指定编码,于是读入的中文语录就全乱码了(这可能也是 windows 用户独享的待遇)。这是问题 A。
- 针对问题 A,我修改了原来的代码,指定编码,读是读进去了,然后显示的时候,
fortunes:::print.fortune()
要求指定个 width 来折行显示,这个对中文又不支持。这是问题 B。
- 针对问题 B,我修改了原来的代码,忽略折行。
- LaTeX 部分函数,开始的时候我没看出来是干啥用的,就留在那里没碰。后来发现只是在写 vignette 时调用而已,于是就删了,改用 Markdown 生成 vignette。这算是 问题 C。
等改到这里的时候,我已经意识到还不如重写,然而既然已经能凑合用了,我就懒得重写了。于是分号分隔这些特点都继承下来了 tctcab 。当然,这个容易改,改成默认值,用户也可以自定义分隔符。
另一层面上, fortunes 是 CRAN 名下的包,于是有盲目崇拜心理,觉得人家官方的包肯定比我这外行从零开始写得好吧。我把修改版 PR 过去不就得了嘛,没必要另写一个包,然而这时才发现 cran/fortunes 项目居然是只读。
于是只好弄成了这个新包。新包对 fortunes 包是兼容的,可以读入 fortunes 的语录:
ftns <- cosx::read.cosxs(system.file("fortunes/fortunes.csv", package = "fortunes"))
cosx::cosx(cosxs.data = ftns)
这样,就可以很方便地把中外文语录合并起来了。而且,别的语种的用户就都可以使用 cosx 包了,只需自己做一个语录表,不必每次都重写——所以可能叫 fortunes2 更为妥当?
关于 Sys.setlocale("LC_CTYPE", "English")
,我平时基本不读入中文的文本文件,这次搞得我很头大。我发现,如果我的 windows 在区域语言里设置格式为 English,那么读入中文 csv 文件时要 read.table(encoding = 'UTF-8')
;如果 windows 在区域语言里设置格式为 Chinese,那么要 read.table(fileEncoding = 'UTF-8')
。于是我就用了 Sys.setlocale("LC_CTYPE", "English")
,一是图省事,二是为了兼容其他语种的 windows 环境。既然其他操作系统没有这个问题,那么我就先判断一下操作系统再执行得了。我的 linux 虚拟机被我折腾得挂掉了,一直没工夫修。
RStudio addin 界面录数据是个好主意,然而我不会做。哪位好汉来?
Cloud2016 论坛的链接居然还能这样?太好了。