本帖信息已过时,包和函数名称以最新回复为准。

简介

cosx 包是个中文语录集。欢迎大家贡献精彩语录。直接 PR 到项目主页 即可。

这个包的缘起:<https://d.cosx.org/d/7673-7673/156>。

包的名字我斗胆暂用 cosx 了,如果大家觉得不妥当,再改无妨。

安装

if(!require('remotes')) install.packages('remotes')
remotes::install_github('pzhaonet/cosx', build = TRUE, 
                        build_opts = c("--no-resave-data", "--no-manual"))

使用

cosx::cosx() # 随机出语录

可以指定第几条。例如:

cosx::cosx(2)

## 
## Sweave 好像就是一边编译 LaTeX 的时候就可以一边执行程序源代码并即时输出结果,我也没正式用过……
##    -- yihui (<https://d.cosx.org/d/7673-7673/15>)
##       d.cosx.org (2007 年 10 月)

或指定作者:

cosx::cosx(author = 'yihui')

以后,我可能经常用到下面这条:

cosx::cosx(1)

## 
## 这个问题我很感兴趣,然而遗憾的是,这个问题我无法重现。
## 
## 能否提供一个可以重现问题的数据和代码示例,让我直接拷贝粘贴就能运行?最好能提供 `session_info()` 信息。
## 
## 提问题的方式详见[新手须知 1.2 正确的发帖姿势](https://d.cosx.org/d/1553-1553)。
##    -- dapengde (耐心温馨欢欣地回答一个不规范的提问)
##       d.cosx.org (2018 年 12 月)

对方如有不解,可以用下面这条来详细解释:

cosx::cosx(3)

## 
## 节约别人的时间,就是节约自己的时间。
## 举个例子,您是从医学的观点出发进行数据分析,对统计以及数理细节其实并不关心,属于“理解当然更好,但是没有也无所谓”的情况。而您真正关心的是,哪个r包,哪个算法,或者跟确切一点,哪个语句能给出您所期待的答案。
## 
## 为什么说会节约时间呢,很简单的一个问题,比如说对我来说,要复现你的问题,那首先得:
## 
## 1. 找一个p>n 的数据集
## 2. 研究一下glmnet怎么用
## 3. 再写一个3~10行的脚本跑一下看看结果
## 
## 虽然1,2,3都是很简单的很容易做到的工作,但是很麻烦,这又不是我的工作内容。虽然培训班网上教程都讲烂了,但是不好意思我没空去看那些。包的手册虽然也能看没问题,但是还是很麻烦。那既然那么麻烦,就还是算了吧。那把我知道的东西告诉你,能帮多少算多少,剩下的就只有祝你好运了。
## 但是如果贴上来的话,我就不用去做1,2,3了,那直接解决4还是一个比较有意思的活。虽然不能保证能解决,但是至少在我有空的时候(比如昨天)可以尝试尝试,如果做到了,那直接可以把代码给你,互相都能省很多时间。
## 
## 而且惰性是人类固有的东西,就比如打以上这段话的时间都够把网上培训班教程再看两遍再写一个脚本了,但是我还是懒得去做这些麻烦的事情而选择在这里慢慢打字,因为这样不费脑子,至少不费管理科的脑子。。。。。
##    -- wglaive ( <https://d.cosx.org/d/420212-glmnet-lasso/6>)
##       d.cosx.org (2018 年 10 月)

还可以逗比一点:

cosx::cosx(4)

## 
## 奇怪了你的代码在我的机器上完全没有问题啊
##    -- tctcab (<https://d.cosx.org/d/420198--/2>)
##       d.cosx.org (2018 年 9 月)

    新增 cosx::cosay(),得到一个小动物说语录的彩色图:

     ----- 
    奇怪了你的代码在我的机器上完全没有问题啊
    
    
    --- tctcab (<https://d.cosx.org/d/420198--/2>), d.cosx.org, 2018 年 9 月 
     ------ 
        \   
         \  
          \
           \   _,
          -==<' `
              ) /
             / (_.
            |  ,-,`\
             \\   \ \
              `\,  \ \
               ||\  \`|,
     jgs      _|| `=`-'
             ~~`~`

    可以把cosx::cosay()添加到 R安装路径/etc/Rprofile.site里。这样,每次打开 R,就随机出现一条语录……

      dapengde 不要修改任何系统文件,否则下次重装或更新软件就被覆盖了。建议用 ~/.Rprofile

      包的名字建议用 sinx 而不要用泛泛的 cosx,因为论坛的域名是 -sin(x) https://cosx.org/2017/07/cos-new-site/

      这个包可以考虑迁移至 cosname 项目下。

      还有我觉得没啥必要复制 fortunes 的代码,逻辑很简单,可以闭眼纯手工写。fortunes 里的 LaTeX 部分函数我觉得没啥用(那帮欧洲人都是 LaTeX 控,这种暗黑 gsub() 代码我看着闹心),还不如支持 R Markdown 输出(用引用 > 格式)。而且分号分隔的数据对 Github 不友好(逗号或制表符分隔的数据在 Github 上可以直接以表格形式浏览)。最后就是建议加个简单的 RStudio addin 界面用来录入数据,省得考虑什么时候要在文本里加引号、反斜杠。

      又及:Sys.setlocale("LC_CTYPE", "English") 是 Windows 特有的,别的系统上没法跑。凡是需要设置语言的情况,几乎一定有更深层的毛病没解决。

        csv格式用的不是comma所以在github上显示了一团,改成comma吧

          Cloud2016 对,这也是我本来想说的。如果做个 RStudio 插件录入语录的话,这个问题可以自动修正。

          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 论坛的链接居然还能这样?太好了。

          dapengde 更改标题为「新包 sinx:论坛语录,中文版的 fortunes

          依照大家的意见,做了如下修改:

          • 包名改为 sinx,然而目前我好像没有权限在 cosname 下创建 repo。安装:
          remotes::install_github('pzhaonet/sinx', build = TRUE, 
                                  build_opts = c("--no-resave-data", "--no-manual"))
          • 主要函数:
            sinx() # 一条语录
            tanx()  # 小动物说语录
            ctanx() #  往 ~/.Rprofile 里添加一条代码,在 R 启动时随机显示一条语录
            read.sinxs() # 读取语录文件
            vignette('sinx') # 语录合集
            用法跟本帖一楼类似。详见各函数的帮助信息,或在线文档

          需要多说一下的是,语录文件是可以随意扩展的,只需用 read.sinxs() 一次读入多个文件即可。下面这个例子,将 fortunes 包里的语录合并进来,一起显示:

          path_f <- system.file("fortunes/fortunes.csv", package = "fortunes")
          path_s <- system.file("sinxs/sinxs.csv", package = "sinx")
          ftns <- sinx::read.sinxs(c(path_f, path_s), sep = c(";", ","))
          sinx::tanx(sinxs.data = ftns)
          • 语录集文件改为了逗号分隔。问题是怎么能在浏览器里避免横向滚动条而自动换行显示这个表格呢?

          大家快来往语录集里 PR 啊!tctcab ,上!记得在 DESCRIPTION 里的作者字段添加自己的名字。

            dapengde 更改标题为「新包 sinx:R 语言社区语录

            试着pull了一条,对github不熟不知道做的对不对【哭笑】

              wglaive 收到!已合并!谢谢!

              我带了个坏头儿——日期格式应该规范一些,以便后续统计。我这就统一改一下。

                尝试了一下写个爬虫来根据 “https://d.cosx.org/d/420467-sinx-r/12” 这样的地址来生成sinx可用的记录,不过看起来评论内容是由js动态加载的,待我再研究一下rvest和phantomJS

                [欢迎提供思路

                新增 secx() 函数,直接把语录文件转成 pagedown 或 bookdown 电子书如:<https://www.pzhao.org/book/cosx/> ,或 xaringan 幻灯片如 <https://www.pzhao.org/slides/cosx/> 。以后可以方便地用 excel 写 word 和 ppt 了!

                新增六个语录包:

                • 唐诗 tangshi
                • 宋诗 songshi
                • 金庸 jinyong
                • 中文名言 chinese
                • 英文名言 english
                • 养生语录 yangsheng

                于是:

                jinyong <- read.sinxs(lib = 'jinyong')
                tanx(sinxs.data = jinyong)
                #> 
                #>  ----- 
                #> 一梦如是。
                #> 
                #> --- 金庸 (天龙八部) 
                #>  ------ 
                #>  ------ 
                #>     \   ^__^ 
                #>      \  (oo)\ ________ 
                #>         (__)\         )\ /\ 
                #>              ||------w|
                #>              ||      ||

                可以合并显示:

                libs <- read.sinxs(lib = c("tangshi", "songshi", "chinese", "yangsheng", "english","jinyong"))
                tanx(sinxs.data = libs)
                #> 
                #> 
                #>  ----- 
                #> 风吹柳花满店香,吴姬压酒唤客尝。
                #> 金陵子弟来相送,欲行不行各尽觞。
                #> 请君试问东流水,别意与之谁短长。
                #> 
                #> --- 李白 (金陵酒肆留别) 
                #>  ------ 
                #>     \   
                #>      \
                #>         (.)_(.)
                #>      _ (   _   ) _
                #>     / \/`-----'\/ \
                #>   __\ ( (     ) ) /__
                #>   )   /\ \._./ /\   (
                #>    )_/ /|\   /|\ \_(  [nosig]

                详见在线帮助

                日期格式我改了。tctcab

                语录库里还有些格式和文本小错误,我懒得挨个查了,欢迎大家 PR 修改,链接在这里

                运行一条 ctanx(lib = 'tangshi'),就会在 ~/Rprofile 里添加一条相应指令,每次启动 R 时就可以读唐诗了。

                可以在这个框架下制作各种语录,例如宋词啦、歌词啦、红楼梦选段啦、郭德纲相声……然后拿这些段子来测试 r markdown 的各种包。例如拿 pagedown 把 tangshi 做成一本书:<https://www.pzhao.org/book/tangshi/>

                做了个 logo 和体恤衫。

                  dapengde

                  我觉得生成一个完整的幻灯片有点过,比如xaringan,可以参考yolo选项在已有slides里插入这样一页语录。

                  另外那个养生什么的太拉低格调了建议去掉…

                    tctcab 语录库是从阮一峰的 repo 里抄来的,我拿来练习正则表达式。养生语录我也觉得有点 low。有啥别的高档素材,PR 过来就行。

                    随机添加一页随机语录的话,幻灯片里直接插一条 sinx() 语句就行了。

                    如果以 markdown 的格式接受大家的推荐语录 PR,会不会比 csv 格式更友好?省的考虑斜杠和引号之类的问题了。

                    所以我把原来的 sinxs.csv 转成了 sinxs.md。原来的 sinxs.csv 改名为 cosxs.csv 备用。包内部自动将 md 和 csv 相互转换。

                    还弄了个 cscx() 函数,运行它,会往剪贴板里拷一个骨架文本,直接 ctrl + v 来添加新语录。我不知道跟 csv 比起来哪个更方便。

                    
                    
                    author: 
                    
                    context: 
                    
                    source: 
                    
                    date:
                    
                    ---

                    如果 markdown 比 csv 更方便组织源文件,那这个包就太蠢了,因为它主要干的就是把 csv 里的源文本以像样的格式 如 markdown 展示出来……

                    不知为何 fortunes 包为何最初以分号分隔的 csv 文件来组织源语录。可能因为开发的时候还没出现 markdown?