R 初学者包 beginr 在 CRAN 正式发布

来自 赵鹏 | June 23, 2017

又一次高兴地宣布, 我的 R 语言扩展包 ‘beginr’ (Zhao 2017a) 在 CRAN 正式发布了.

简介

beginr是我为 R 语言初学者和自己写的工具包, 是我这些年来收集和自己编写的一些简化操作的函数和备忘录, 可能对中级用户也有帮助. 其实这个包的文档我写得不够详细, 有些函数还没来及整理进去, 之所以匆匆发布, 是想先把 ‘beginr’ 这个名字给占住. 毕竟, 我中意的名字如 ‘learnr’, ’startr’都被别人用过了.

安装方法:

# 稳定版:
install.packages('beginr')
# 开发版:
devtools::install_github("pzhaonet/beginr")

下面分类介绍一下其中的函数.

备忘函数

我初学 R 的时候用 plot() 作图时, 常常忘记不同形状数据点(pch)对应的编号, 实线虚线(lty)的编号, 散点图类型(type)的代码, 以及最难选择的颜色代码. 每次忘了都要上网搜一下. 现在, beginr 里提供了 plotpch(), plotlty(), plottype(), plotcolors(), plotcolorbar()等函数, 想不起来的时候运行一下就行了.

beginr::plotpch()

beginr::plotlty()

beginr::plottype()

beginr::plotcolors()

beginr::plotcolorbar()

快速作图函数

我常常需要做线性拟合, 每次又是作图又是添加拟合方程, 繁琐. 现在, beginr 里的一个 plotlm()函数就搞定.

x <- 1:10
y <- 1:10 + rnorm(10)
beginr::plotlm(x, y)

## [[1]]
##               Estimate Std. Error   t value     Pr(>|t|)
## (Intercept) -0.8119696  0.7796136 -1.041503 3.280916e-01
## x            1.2047701  0.1256461  9.588598 1.160491e-05
## 
## [[2]]
## [1] 0.9199529

经常需要了解一组数据的分布, 看看是不是正态分布. beginr 里的 plothist() 函数不仅做出直方图和平滑曲线, 并且标出中值, 中位数, 四分位数, 标准偏差, 样本数, 以及用来判断是否正态分布的 skewness 值.

x <- rnorm(10000)
beginr::plothist(x)

我很喜欢系统自带的成对儿散点图函数pairs(), 只是功能再强大一点就好了. beginr 里的 plotpairs()plotpairs2() 可以实现.

df <- data.frame(a = 1:10, b = 1:10 + rnorm(10), c = 1:10 + rnorm(10))
beginr::plotpairs(df)

beginr::plotpairs2(df)
## [1] "p<0.01"
## [1] "p<0.01"
## [1] "p<0.01"

我经常需要将一组自变量 (x) 和多组因变量 (y1, y2, …, yn) 作在同一个坐标系, 或者一组因变量 (y) 对多组自变量 ((x1, x2, …, xn)), 并且画上各自的误差线. beginr 里一条 dfplot()dfplot2() 函数就能完成.

x <- seq(0, 2 * pi, length.out = 100)
y <- data.frame(sin(x), cos(x))
yerror <- data.frame(abs(rnorm(100, sd = 0.3)), abs(rnorm(100, sd = 0.1)))
beginr::dfplot(x, y, yerror = yerror)

beginr::dfplot2(y, x, xerror = yerror)

如果只是想简单添加误差线, 那就用 errorbar() 函数.

x <- seq(0, 2 * pi, length.out = 100)
y <- sin(x)
plot(x, y, type = "l")
beginr::errorbar(x, y, yupper = 0.1, ylower = 0.1)

数据框操作

beginr 提供了一些对数据框计算的函数, 例如计算多列数据两两的相关性和线性拟合结果, 可以用 lmdf() 函数.

df <- data.frame(a = 1:10, b = 1:10 + rnorm(10), c = 1:10 + rnorm(10))
beginr::lmdf(df)
##   x y r.squared adj.r.squared  intercept     slope Std.Error.intercept
## 1 a b 0.9690620     0.9651948 -0.7180941 1.0626670           0.4165363
## 2 a c 0.9096516     0.8983581  0.1911370 0.8886071           0.6143527
## 3 b a 0.9690620     0.9651948  0.8249997 0.9119150           0.3451440
## 4 b c 0.9039390     0.8919314  0.8717169 0.8205789           0.5666305
## 5 c a 0.9096516     0.8983581  0.3012525 1.0236826           0.6547659
## 6 c b 0.9039390     0.8919314 -0.4678080 1.1015869           0.7288208
##   Std.Error.slope t.intercept   t.slope Pr.intercept     Pr.slope
## 1      0.06713090  -1.7239652 15.829774   0.12300344 2.536723e-07
## 2      0.09901191   0.3111194  8.974749   0.76366232 1.891784e-05
## 3      0.05760758   2.3903061 15.829774   0.04383489 2.536723e-07
## 4      0.09457565   1.5384220  8.676429   0.16250520 2.423574e-05
## 5      0.11406253   0.4600919  8.974749   0.65769686 1.891784e-05
## 6      0.12696317  -0.6418698  8.676429   0.53891030 2.423574e-05

还有两个函数对tapply()进行了改善, 用来进行因子计算.

beginr::tapplydf()
beginr::tapplydfv()

文件读写函数

经常需要同时对多个数据文件进行处理, 逐个读入 R 里太麻烦. beginr 提供了个 readdir() 函数, 可以一次性把指定文件夹里所有数据读入, 保存在一个列表 (list) 里.

beginr::readdir()

R 自带的 write 系列文件保存函数, 一不小心就把原有同名文件给覆盖了. beginr 提供了个安全的函数 writefile(), 避免一失足成千古恨.

beginr::writefile()

list2ascii() 函数可以把一个列表原样保存成文本文件.

alist <- list(a = 1:10, b = letters)
beginr::list2ascii(alist)

扩展包函数

很多人引用了别人的工作却往往不列出参考文献. 不仅初学者常常如此, 很多学术论文里有些插图一眼就能看出是 R 的某个扩展包作出来的, 但参考文献里却没有列出来, 这往小了说是不尊重别人的工作,往大了说是缺乏学术道德. 对开源社区的生态圈是不利的. beginr 为初学者提供了 bib() 函数, 可以为指定的 R 扩展包生成文献引用信息, 既可以打印出结果, 也可以直接保存为 ‘.bib’文件方便为’bookdownplus(Zhao 2017b) 或 ‘blogdown(Xie 2017) 调用.

beginr::bib(pkg = c("mindr", "bookdownplus", "pinyin"))
## @Manual{R-mindr,
##   title = {mindr: Convert Files Between Markdown or Rmarkdown Files and Mindmaps},
##   author = {Peng Zhao},
##   year = {2019},
##   note = {R package version 1.2.3},
##   url = {https://github.com/pzhaonet/mindr},
## }
## @Manual{R-bookdownplus,
##   title = {bookdownplus: Generate Assorted Books and Documents with R 'bookdown' Package},
##   author = {Peng Zhao},
##   year = {2019},
##   note = {R package version 1.5.8},
##   url = {https://github.com/pzhaonet/bookdownplus},
## }
## @Manual{R-pinyin,
##   title = {pinyin: Convert Chinese Characters into Pinyin, Sijiao, Wubi or Other
## Codes},
##   author = {Peng Zhao},
##   year = {2019},
##   note = {R package version 1.1.6},
##   url = {https://github.com/pzhaonet/pinyin},
## }

plotpkg()函数可以做出一张图,来展示指定扩展包在CRAN上被用户下载的次数:

beginr::plotpkg("beginr", "2017-06-23")

新手可以用rpkg()函数快速创建自己的扩展包.

beginr::rpkg()

好啦, 以后我还会把更多有用的工具添加到 beginr 包里. 欢迎关注 beginr的项目主页. 另外, 使用beginr的地方请记得列出参考文献哦.

beginr::bib(pkg = c("beginr"))
## @Manual{R-beginr,
##   title = {beginr: Functions for R Beginners},
##   author = {Peng Zhao},
##   year = {2019},
##   note = {R package version 0.1.8},
##   url = {https://github.com/pzhaonet/beginr},
## }

参考文献

Xie, Yihui. 2017. Blogdown: Create Blogs and Websites with R Markdown. https://github.com/rstudio/blogdown.

Zhao, Peng. 2017a. Beginr: Functions for R Beginners. https://github.com/pzhaonet/beginr.

———. 2017b. Bookdownplus: Generate Varied Books and Documents with R ’Bookdown’ Package. https://CRAN.R-project.org/package=bookdownplus.

comments powered by Disqus