apply族函数12-3(小完结)
2021-10-21 本文已影响0人
小胡同学ime
1.apply 处理矩阵或数据框
apply(X, MARGIN, FUN, …)
*其中X是数据框/矩阵名;
*MARGIN为1表示取行,为2表示取列,FUN是函数
test<- iris[,1:4]
apply(test, 2, mean)
[1]Sepal.Length Sepal.Width Petal.Length Petal.Width
5.843333 3.057333 3.758000 1.199333
a <- apply(test, 1, sum);a[1:3] #观察结果的前三个
[1] 10.2 9.5 9.4
res <- c()
for(i in 1:nrow(test)){
res[[i]] <- sum(test[i,]) #每一行依次求和
}
res[1:3]
[[1]]
[1] 10.2
[[2]]
[1] 9.5
[[3]]
[1] 9.4
2.lapply(list, FUN, …)
对列表/向量中的每个元素(向量)实施相同的操作
test <- list(x = 36:33,
y = 32:35,
z = 30:27)
返回值是列表,对列表中的每个元素(向量)求均值(试试方差var,分位数quantile)
lapply(test,mean)
class(lapply(test,mean)). #输出为列表
x <- unlist(lapply(test,mean));x
class(x) #简单化
3.sapply 处理列表,简化结果,直接返回矩阵和向量
sapply(X, FUN, …) 注意和lapply的区别,返回值不一样
lapply(test,min)
sapply(test,min)
lapply(test,range)
sapply(test,range)
class(sapply(test,range))
练习:
# 1.加载test2.Rdata,求每一行的方差
# load(file = "test2.Rdata")
apply(test, 1, sd)[1:3]
[1] 2.179449 2.036950 1.997498
# 2.加载class.Rdata,尝试将前6列转为数值型,得到一个新矩阵
# load(file = "class.Rdata")
# apply(y[,1:6], 2, as.numeric)
# 3.解析代码:
names(tail(sort(apply(test,1,sd)),1000))[1:10]
### 重点函数
* ***sort***
* ***match***
* ***names***
* ***ifelse 和 str_detect***
* ***identical***
* ***arrange***
* ***merge 和 inner_join***
* ***unique 和 duplicated***
### 重点知识点
* ***向量数据框、列表取子集***
* ***数据框新增列***
* ***文件读取***
* ***Rdata的加载与保存***
* ***作图保存***
* ***R包安装和加载***
* ***形式参数、实际参数、默认参数***
#### R语言遍历、创建、删除文件夹
* dir()
* file.create()
* file.exists(…)
* file.remove()
* file.rename(from, to)
* file.append(file1, file2)