楚新元 | All in R

Welcome to R Square

分享几个 R Skill

楚新元 / 2021-08-28


在博客里嵌入 Shiny app

在博客中嵌入 Shiny app 的大体过程如下:

  1. 先把你的 Shiny app 发布到 shinyapps.io 上或者部署到云服务器上。

  2. 在 chunck 用 knitr::include_app("shiny_app_url") 函数插入。

下面是我基于 learnr 包做的一个在线学习平台示例:

注意 2020-06-10

knitr::include_app() 函数目前只有 height 参数,没有 width 参数。代码块选项 out.width 可以调整 Shiny app 显示在网页里的宽度。另外 str(knitr::opts_chunk$get()) 可以查看完整的代码块选项列表。

knitr::include_app("https://chuxinyuan.shinyapps.io/learnr/", height = "580px")

沉浸在 RStudio 里,不出门实现英汉互译

注意 2020-06-10

之前调用有道 API 翻译某个单词,得到的结果是关于这个单词所有的翻译结果,例如翻译 “good”,输出结果很丰富,比如“优良的”、“能干的”、“好的”、“货物”、“古德”等等,而且还有这个单词的发音,但是对于句子的翻译能力比较弱,2024 年 4 月份,有道那边把单词翻译给单独拿出去整了个付费服务,而现在的翻译只针对句子,因此翻译的结果是唯一的,一个单词也视为一个句子,但是对句子的翻译能力是增强了的。我不知道这个调整好不好,但是对于查看 R 的帮助文档来说还是方便了不少。

鄙人写了一个 ecce 包专门干这事,不多说了,直接上代码

library(ecce)
translate("good")
## [1] "好"

这些内容还不够,一行命令打开网页看

translate_view("good")

给汉字标注拼音

pinyin("时间序列模型")
## shí jiān xù liè mó xíng 
##  时  间  序  列  模  型

更多内容请看这里: https://cxy.cc/rproj/ecce/

用 R 语言提取 Word 文档中的表格数据

语言读取数据来源一般有 .csv、.xls 或 .xlsx、.txt 和各种数据库等。其中 R 从 Excel 读取数据推荐 readxl 和 openxlsx 包,其他不常见格式的数据一般 rio 包轻松搞定,这里不多介绍,看帮助文档即可。一般数据分享很少有通过 Word 作为载体的,但有些时候我们确实需要从 Word 文档里读取一些数据,这里推荐一个神奇的包 docxtractr。下面我给出示例代码供参考:

library(docxtractr)
doc = read_docx("path/to/xxxx.docx")  # 告诉 R 数据源的位置并读入内存
docx_extract_tbl(doc, tbl_number = 3)  # 提取 xxxx.docx 文档的第三个表格

经测试效果非常好。默认表格是带表头的,对于没有表头的数据可以指定 header = FALSE 即可,更多信息请通过 help(package = "docxtractr") 查看包的官方手册。

为你的网站设计一个二维码

开发一个包,总体上要做两件事,一是包的功能问题,这是关键;二是包的帮助文档和宣传问题。包的帮助文档的完善,包括 .Rd 文件(这是必不可少的,将来官网上的手册就是根据这个生成的)、README、vignette 和 NEWS。后面三个不是提交 CRAN 必须的,但是这些文档对新用户非常有帮助。有了这些文档,就可以很容易利用 pkgdown 包生成网页。对于一个专业的 R 开发人员,他还会考虑为他的包设计一个六角贴1。做完这些就可以在 R 社区宣传你的 R 包了,比如微信朋友圈、微博,甚至是 r-packages 邮件列表

最近发现了一个很有趣的博文:《用 R 打造炫酷彩色二维码》,根据这篇文章的代码就可以很容易的为任何一个网站生成彩色的二维码(注:用 “https” 有问题,用 “http” 才行,具体原因未知)。其实之前我也尝试为一个 url 生成二维码,但是生成的二维码非常单调,只能保证能用,但是代码非常靠谱且简洁,代码如下:

library(qrcode)
qr = qr_code("https://cxy.cc/")
plot(qr)

用 tesseract 包识别图片文字

这里直接给出代码如下,读者自行体验。

# 加载 R 包
library(tesseract)

# 查看是否有中文训练数据
tesseract_info() 

# 下载中文训练数据
# tesseract_download("chi_sim") # 下载简体中文数据
# tesseract_download("chi_tra") # 下载繁体中文数据

# 定义引擎及图片文件路径
cn = tesseract("chi_sim")
file = "path/to/image"

# 输出文字
txt = ocr(file, engine = cn)
cat(txt)

# 读取图片并显示
library(magick)
img = image_read(file)
image_scale(img, "x1000")

由于输出的文字会有部分错误,需要配合图片进行手工修改,因此可以通过最后两行代码,将图片显示在 Viewer 窗口中,这样对照者图片调整比较方便。


  1. 六角贴的制作请看我之前的博文↩︎