语法:
myfunction <- function(arg1, arg2, ... ){
statements
return(object)
}
参数解释:
参数 | 解释 |
---|---|
myfunction |
自定义函数名称 |
arg1, arg2, ... |
自定义参数arg1,arg2… |
statements |
语句 |
return() |
返回输出结果 |
示例:
func <- function(x) {
m = mean(x)
s = sum(x)
max = max(x)
min = min(x)
return(c(mean =m, sum = s, max = max, min = min))
}
func(1:10)
## mean sum max min
## 5.5 55.0 10.0 1.0
语法:if(condition){statement1}else{statement2}
参数解释:
参数 | 解释 |
---|---|
condition |
条件 |
statement1 |
符合条件执行语句1 |
statement2 |
不满足条件则执行语句2 |
示例:
x = 1:4
if (sum(x) < 10) {
a = x
}else{
a = x+1
}
a
## [1] 2 3 4 5
条件函数还有一种简写的替代方法:ifelse(condition, statement1, statement2)
ifelse(x <3,'a','b')
## [1] "a" "a" "b" "b"
语法:
for (variable in vector) {
}
参数解释:
参数 | 解释 |
---|---|
variable |
循环变量 |
vector |
序列 |
示例:
for (i in 1:5) {
m = mean(mtcars[,i])
print(m)
}
## [1] 20.09062
## [1] 6.1875
## [1] 230.7219
## [1] 146.6875
## [1] 3.596563
apply函数可以作为for循环的替代函数,当循环次数很多时,apply()函数遍历耗时会远低于for循环,所以处理很大的矩阵或着数据框时推荐使用apply()函数。
语法:apply(x, MARGIN, FUN)
参数解释:
参数 | 解释 |
---|---|
x |
数据对象:矩阵或者数据框 |
MARGIN |
维度下标,MARGIN=1 表示行,MARGIN=2 表示列 |
FUN |
指定作用于数据对象的函数,可以是R中函数,也可以是自定义函数。 |
示例:利用apply()函数进行批量单因素cox回归
# 创建表达矩阵
library(stringr)
cnames = str_c('gene',1:10)
rnames = str_c('sample',1:10)
expr = matrix(runif(1:100),nrow = 10,dimnames = list(rnames,cnames))
expr[1:4,1:4];dim(expr)
## gene1 gene2 gene3 gene4
## sample1 0.86569260 0.1420018 0.8014461 0.1424188
## sample2 0.81419873 0.2812020 0.2940442 0.3635415
## sample3 0.63597431 0.2347103 0.4854522 0.9083894
## sample4 0.04773104 0.4288034 0.8831775 0.7682417
## [1] 10 10
# 创建生存数据
pdata = data.frame(OS = seq(1,91,by = 10),
status = rep(c(0,1),5))
pdata[1:4,]
## OS status
## 1 1 0
## 2 11 1
## 3 21 0
## 4 31 1
# 构建函数
library(survival)
func = function(gene){
cox = coxph(Surv(pdata$OS,pdata$status)~gene)
coxresult = summary(cox)
pvalue<- coxresult$coefficients[5]
HR<-coxresult$conf.int[1]
low<-coxresult$conf.int[3]
high<-coxresult$conf.int[4]
coef<- coxresult$coefficients[1]
c(pvalue = pvalue, HR = HR, low = low,high = high, coef = coef)
}
# 批量单因素cox回归
df <- t(apply(expr, 2, func))
library(DT)
datatable(df)
语法:sapply(X, FUN)
参数解释:
参数 | 解释 |
---|---|
X |
数据对象:向量或者列表 |
FUN |
作用在对象中的函数 |
示例1:批量删除文件
file = dir()
sapply(file, unlink)
示例2:
lst <- list(a=c(1:5), b=c(1:10))
sapply(lst,mean)
## a b
## 3.0 5.5
语法:mapply(FUN, ..., MoreArgs=NULL, SIMPLIFY=TRUE, USE.NAMES=TRUE)
mapply是多变量版的sapply,参数...
部分可以接收多个数据,mapply将FUN应用于这些数据的第一个元素组成的数组,然后是第二个元素组成的数组,以此类推。要求多个数据的长度相同,或者是整数倍关系。返回值是vector或matrix,取决于FUN返回值是一个还是多个。
示例:
mapply(max, list(a=1,b=4,c=5), list(a=2,b=3,d=4))
## a b c
## 2 4 5
mapply(function(x,y) {x-y}, 1:10, 1:5)
## [1] 0 0 0 0 0 5 5 5 5 5
mapply(function(x,y) {c(x-y,x+y)}, 1:10, 1:5)
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## [1,] 0 0 0 0 0 5 5 5 5 5
## [2,] 2 4 6 8 10 7 9 11 13 15
本博客内容将同步更新到个人微信公众号:生信玩家。欢迎大家关注~~~