不要使用管道的情况
- 操作步骤超过10个
- 多个输入和输出
- 操作步骤构成有复杂依赖关系的有向图
其他工具
- tidyverse中所有包都会自动加载%>%
- %T>% 返回左侧想
- %<>% 可以进行赋值操作
创建函数
- 选择函数名称
- 列举function中所有参数
- 将编好的代码放入函数体中
p188 练习题
- finite = TRUE 会丢失无限元素
若na.rm值是FALSE,则所有有关NA的操作都会返回NA
rescale01 <- function(x) {
rng <- range(x, na.rm = TRUE, finite = TRUE)
y <- (x - rng[1]) / (rng[2] - rng[1])
y[y == -Inf] <- 0
y[y == Inf] <- 1
y
}
variance <- function(x, na.rm = TRUE) {
n <- length(x)
m <- mean(x, na.rm = TRUE)
sq_err <- (x - m) ^ 2
sum(sq_err) / (n - 1)
}
both_na <- function(x, y) {
sum(is.na(x) & is.na(y))
}
both_na(c(NA, NA, 1, 2),
c(NA, 1, NA, 2))
[1] 1
both_na(c(NA, NA, 1, 2, NA, NA, 1),
c(NA, 1, NA, 2, NA, NA, 1))
[1] 3
- is.directory主要用来检查x是否是路径
is.readable用来检查x是否可读
人与函数
命名原则
- snake_case,小写单词,用下划线隔开
- camelCase,首单词小写,其余首字母大写
- 功能类似的命名具有一致性
p190练习题
- f1 检查是否是字符向量
f2 去掉向量中的最后一个,drop_last()
f3 为每个x重复一次y recycle - rnorm() 单变量正态分布
MASS:mvrorm 多变量正态分布 - r* functions always sample from distributions: for example, rnorm(), rbinom(), runif(), and rexp().
d* functions calculate the probability density or mass of a distribution: For example, dnorm(), dbinom(), dunif(), and dexp().
条件执行
if(condition){