9.3 管道操作
Stefan Milton Bache 开发了 magrittr 包实现管道操作,增加代码的可读性和维护性,但是这个 R 包的名字取的太奇葩,因为 记不住,它其实是一个复杂的法语发音,中式英语就叫它马格里特吧!这下应该好记多了吧!
我要查看是否需要新添加一个 R 包依赖,假设该 R 包是 reticulate 没有出现在 DESCRIPTION 文件中,但是可能已经被其中某(个)些 R 包依赖了
"reticulate" %in% sort(unique(unlist(tools::package_dependencies(desc::desc_get_deps()$package, recursive = TRUE))))
## [1] FALSE
安装 pkg 的依赖
<- c(
pkg "bookdown",
"e1071",
"formatR",
"lme4",
"mvtnorm",
"prettydoc", "psych",
"reticulate", "rstan", "rstanarm", "rticles",
"svglite",
"TMB", "glmmTMB"
)# 获取 pkg 的所有依赖
<- tools::package_dependencies(pkg, recursive = TRUE)
dep_pkg # 将列表 list 合并为向量 vector
<- Reduce("c", dep_pkg, accumulate = FALSE)
merge_pkg # 所有未安装的 R 包
<- setdiff(unique(merge_pkg), unique(.packages(TRUE)))
miss_pkg # 除了 pkg 外,未安装的 R 包,安装 pkg 的依赖
sort(setdiff(miss_pkg, pkg))
## [1] "bayesplot" "BH" "colourpicker" "distributional"
## [5] "dygraphs" "gtools" "inline" "loo"
## [9] "mnormt" "posterior" "RcppParallel" "rstantools"
## [13] "shinyjs" "shinystan" "shinythemes" "StanHeaders"
## [17] "tensorA" "threejs" "xts"
转化为管道操作,增加可读性
再举一个关于数据模拟的例子
模拟 0-1 序列,
set.seed(2019)
<- function(n) {
binom_sample sum(sample(x = c(0,1), size = n, prob = c(0.8, 0.2), replace = TRUE))/n
}# 频率估计概率
<- sapply(10^(seq(8)), binom_sample)
one_prob # 估计的误差
<- abs(one_prob - 0.2)
one_abs one_abs
## [1] 1.000e-01 1.000e-02 1.100e-02 4.400e-03 1.460e-03 3.980e-04 4.700e-06
## [8] 9.552e-05
似然估计