R-数据科学(九):函数与控制

自定义函数

语法:

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函数

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) 

R-数据科学(九):函数与控制_第1张图片

sapply函数

语法: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函数

语法: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

本博客内容将同步更新到个人微信公众号生信玩家。欢迎大家关注~~~
在这里插入图片描述

你可能感兴趣的:(R-数据科学)