生信R语言基础【6】

rm(list = ls())

掌握for循环,if判断, apply批量操作

for循环

写法一:for (variable in vector) {

   action(variable)

}

写法二:for (variable in vector) { action(variable)}

写法三:for (variable in vector) action(variable)

if 判断

第一种

if (condition) {

  action

}

第二种

if (condition) {

action

} else {

action

  }

##################################################

if 判断实战:利用循环判断癌和癌旁组织

加载数据

load(file = "data/TCGA_ggplot.Rdata")

首先确定框架,我们的需求是批量做什么?

然后解决单次操作:如何用R语言实现单次的需求

方法一:for循环+if判断

实战代码步骤分解:

创建容器

metadata <- data.frame(TCGA_id=rownames(exprSet))

for (i in 1:nrow(metadata)) {

指示

print(i)

substring的用法,这是元素获取

num <- as.numeric(substring(metadata[i,1],14,15))

#如果是肿瘤,就给第2列加上Tumor if (num %in% seq(1,9)) { metadata[i,2] = "Tumor" }

#如果是正常组织,就给第2列加上Normal if (num %in% seq(10,29)) { metadata[i,2] = "Normal" } }

 

修改名称

colnames(metadata) <- c("TCGA_id","sample")

统计频次

table(metadata$sample)

方法二: ifelse 二分类

TCGA_id <- rownames(exprSet)

使用table来统计频次

substring(TCGA_id,14,15)

table(substring(TCGA_id,14,15))

sample <- ifelse(substring(TCGA_id,14,15)=="11","Normal","Tumor")

将结果与ID整理为新的数据表

metadata <- data.frame(TCGA_id,sample)  

table(metadata$sample)

rm(list = ls())

方法三:三分类

好几种方法:

(1)

TCGA_ id <- rownames (exprSet)

index <- substring (TCGA_id, 14,15)

table(index)

sample <- factor(index,

                         levels = c("01", "06", "11"),

                         labels = c("Primary", "Metastatis", "Normal")

                         )

metadata <- data.frame(TCGA_id,sample)

table(sample)

(2)

(3)

(4)

apply()

apply 处理的是矩阵或者纯数据的数据框的行或者列

apply(X, MARGIN, FUN, …)

其中X为一个数组;MARGIN为一个向量(表示要将函数FUN应用到X的行还是列),

若为1表示取行,为2表示取列,为c(1,2)表示行、列都计算。

load(file = "data/brca.Rdata")

ma <- exprSet[,5:9]

按行操作

apply(ma,1, sum)

rowSums(ma)

按列操作

apply(ma,2, mean)

colMeans(ma)

apply实战中的作用

rm(list = ls())

1.去掉表达值一致的基因

load(file = "data/apply_var.Rdata")

test <- rt[,1:10]

dd <- rt[,-c(1,2)]

sum(apply(dd,2,var)==0)

dd1 <- dd[,apply(dd,2,var)!=0]

rt <- cbind(rt[,c(1,2)],dd1)

2.批量转换

批量把因子转换成数值,还记得这里的坑么?

rm(list = ls())

load(file = "data/expreSet_string.Rdata")

注意,学会str的用法

str(expreSet)

可以看出expreSet是数据框,但是里边的内容都是文本,如"2.71059" 

test <- expreSet[,2]

head(test)

as.numeric(test)

as.numeric(as.character(test))

两次批量操作

dd1 <- apply(expreSet,2,as.character)

dd2 <- apply(dd1,2,as.numeric)

dd3 <- as.data.frame(dd2)

注意,学会str的用法

str(dd3)

#######################################################

复习:

for 循环结构,

if 判断结构

table

ifelse

var

apply

as.character()

as.numeric()

as.data.frame()

str

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值