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) 

在这里插入图片描述

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

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

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
清华大学出品的R语言全套课程PPT学习课件,非常适合大学生和职场人士学习,也适合老鸟复习回顾,完全可用于自学入门,很经典好用的PPT课件哦~ (1)清华大学精品数据科学R语言全套课程PPT课件含习题(26页) 第1章 R语言绪论(1) (2)清华大学精品数据科学R语言全套课程PPT课件含习题(27页) 第2章 R语言入门 (3)清华大学精品数据科学R语言全套课程PPT课件含习题(53页) 第3章 数据模型 (4)清华大学精品数据科学R语言全套课程PPT课件含习题(15页) 第4章 数据准备 (5)清华大学精品数据科学R语言全套课程PPT课件含习题(66页) 第5章 数据可视化 (6)清华大学精品数据科学R语言全套课程PPT课件含习题(35页) 第6章 数据探索 (7)清华大学精品数据科学R语言全套课程PPT课件含习题(38页) 第7章 数据变换 (8)清华大学精品数据科学R语言全套课程PPT课件含习题(20页) 第8章 高级编程 (9)清华大学精品数据科学R语言全套课程PPT课件含习题(63页) 第9章 数据建模 (10)清华大学精品数据科学R语言全套课程PPT课件含习题(25页) 第10章 数据评估 (11)清华大学精品数据科学R语言全套课程PPT课件含习题(21页) 第11章 影响大学平均录取分数线因素分析 (12)清华大学精品数据科学R语言全套课程PPT课件含习题(18页) 第12章 收视率分析 (13)清华大学精品数据科学R语言全套课程PPT课件含习题(18页) 第13章 RHadoop (14)清华大学精品数据科学R语言全套课程PPT课件含习题(25页) 第14章 Rspark
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值