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)
上一篇 下一篇

猜你喜欢

热点阅读