55.安装SDMTools 下架
R - Can't install 'SDMTools' for R version 3.6.2
install.packages("remotes")
remotes::install_version("SDMTools", "1.1-221")
54.安装XML包报错
install.packages("XML", repos = "http://www.omegahat.net/R")
53.大文件读取 data.table
/ fread
情形:比如说每一列最后面多一个tab , fread 读入正常,但是基础函数读入就会报错。
52.快捷键失效
lenovo 快捷键失效:ctrl+1 修改成ctrl+up.
51. R 进行归一化方法
scale函数对矩阵归一化是按行归一化,还是按列归一化?
scale 默认按列归一化,同时pheatmap 提供scale 参数可以按列和按行归一化.
50.正则表达式 (\ 与\)
49. dplyr常用操作
如果想用select()过滤未数字的列,可以使用!is.numeric(.),这里的代表function
msleep %>%
select_if(~!is.numeric(.)) %>%
glimpse
## summarize 对特定列进行统计,at 后接列名称向量
mtcars %>%
group_by(cyl) %>%
summarise_at(c("mpg", "disp", "hp"), mean)
48. R语言设置相关
- 其R包安装位置
https://blog.csdn.net/sinat_35187039/article/details/80239668
函数:.libPaths()
: 指明下载的包解压后,安装的位置,默认是R.exe上一级目录下library 文件夹
参数:lib
和destdir
:分别指出文件下载的位置,以及解压后安装到位置。如果lib
不写,默认解压安装到libPath()
里面
- R options设置
rm(list = ls())
# 不输出waring
options(warn=-1)
# 字符串不转换成因子
options(stringsAsFactors = F)
47. do.call 最完善的解释
通过帮助文档知道了,do.call 第二个参数,必须是list
,可以把它转换成tmp[[1]],tmp[[2]],tmp[[3]],sep="\t" 四个参数进行传递给paste
do.call("paste", c(tmp, sep = ""))
等同于
paste(tmp[[1]],tmp[[2]],tmp[[3]], sep = "")
46.升级 R https://blog.csdn.net/orchidzouqr/article/details/94384557
- 最好用Rgui 运行
install.packages("installr")
library(installr)
updateR()
# updateR(fast=TRUE,cran_mirror="https://mirrors.ustc.edu.cn/CRAN/")
45.load与data 的区别
load() 应该是从文件中载入数据,需要指定该文件的路径,而该文件是先前使用 save() 保存下来的,其格式与系统缺省所保存的 .RData 一样。
data() 是从已安装的包中载入数据,不需要指定文件路径
>save(B,file="1.RData")
>load("1.RData")
> ls()
[1] "B"
> B
[1] 1 2 3 4 5 6 7 8
44.ifelse和if_else 差别
当test1 第一列在test2 中,最后一列赋值为1
尝试了ifelse,if_else ,发现if_else 只能对condition判断进行输出,不能对原变量进行修改及其赋值。
apply 和 for 循环类似,是对每一列操作后,输出为data.frame。
> test1
V1 V3 V4 V5 V6 V7 V8
1 chr17,chr17 0.005539355 0.039044000 0.122098804 0.15646555 0.02944775 0.001091181
2 chr11,chr17 -0.002308293 -0.021429420 -0.015162463 0.09823601 0.07250968 -0.004267148
3 chr17,chr6 -0.002009416 -0.010506168 0.057401288 0.08913235 0.04825522 -0.004040490
4 chr1,chr17 0.010890329 -0.001355257 0.050541960 0.05530440 0.05670207 -0.005107226
5 chr17,chr2 0.015338174 0.011412834 0.037120402 -0.03438133 0.02997743 -0.020807328
6 chr17,chr19 0.011352259 0.005457897 0.017193813 0.07226271 0.05071934 -0.007017304
7 chr17,chr9 -0.016986335 -0.009784664 0.045798458 0.07713509 0.05663328 -0.013103256
8 chr12,chr17 -0.016105516 -0.036733203 0.007333334 0.19082880 0.09036952 0.006711165
9 chr17,chr21 0.018684294 -0.016253024 -0.017760037 -0.05845185 0.05585530 -0.020302733
10 chr16,chr17 0.039056275 0.012903601 0.029835701 -0.06858563 0.03015597 -0.015712518
V9 V10 V11 V12
1 0.022112789 0.069530450 0.006017665 0
2 0.003515933 -0.011290263 0.012123219 0
3 0.008340748 0.050997686 0.006665931 0
4 -0.030897608 0.023426734 0.004465404 0
5 -0.040782742 -0.042077541 0.007696471 0
6 -0.007638139 0.016115718 0.007552080 0
7 0.013801019 0.002422534 0.005766133 0
8 0.036535345 0.034734201 0.012055983 0
9 -0.056969829 -0.079630174 0.009267730 0
10 -0.054881822 -0.003083119 0.005709210 0
> test2
nodeA category
1 chr1,chr4 0
2 chr17,chr19 0
3 chr11,chr18 0
4 chr2,chr7 0
5 chr11,chr19 0
6 chr13,chr9 0
7 chr19,chr9 0
8 chr11,chr12 0
9 chr1,chr16 0
10 chr5,chr6 0
################################
test1 <- read.delim("test1.txt",sep = " ",stringsAsFactors = F)
test2 <- read.delim("test2.txt",sep = " ",stringsAsFactors = F)
library(tidyverse)
tbl_df(test1) %>% mutate(V12=if_else(V1 %in% test2$nodeA,"1","0"))
# for (i in 1:nrow(test2)){
# if_else(test1[i,1] %in% test2$nodeA,
# test1[i,11] <- "1",
# test1[i,11] <-"0")
# }
test1$V12 <- "null"
for (i in 1:nrow(test2)){
ifelse(test1[i,1] %in% test2$nodeA , test1[i,11] <- "1" , test1[i,11] <- "0")
print(test1[i,11])
}
43.R数据对象处理函数(三)-精确、部分和完全匹配
%in%,match
match(str_trim(tmp_neast_gene_1M_df[["genename"]]) , rownames(match_exp_file),nomatch = NA)
rownames(match_exp_file) %in% str_trim(tmp_neast_gene_1M_df[["genename"]])
42.部分场景"<" 和"=" 不能通用
1.data.frame("a"=c(1:3) ,"b"=c(2:4))
2.ifesle(条件,A <-2)
3.函数赋值
41. trycatch 机制
(1)抓取错误
tryCatch(libray(xx),error=function(e){print("出现错误")} )
结果:
[1] "出现错误"
当xx包出现错误时候就会执行error函数 ,把error的结果执行出来
(2)抓取错误和警告
tryCatch(libray(xx),warning = function(w){print("出现警告")},
error=function(e){print("出现错误")} )
(3)finally最后都会执行,跟python和java类似
tryCatch(libray(xx),warning = function(w){print("出现警告")},
error=function(e){print("出现错误")},
finally={
print("导入ggplot2包")
library(ggplot2)
}
)
40.存储单个参数
Tips:
1.一般通过default
存储默认值,当只需要存储一个值用action="store_true"
- 在帮助信息里面展示 实例的输入参数
metavar
:
library(optparse)
parser <- OptionParser(description = "calculate relation between somatic and expression!")
parser <- add_option(parser, c("-s", "--snp_file"), type="character",
action="store", default="", help="input somatic snp file")
parser <- add_option(parser, c("-m", "--motif_file"), type="character",
action="store", default="", help="input motif position file")
parser <- add_option(parser, c("-e", "--exp_file"), type="character",
default="", help="expression data (matrix:row_gene,column:sample)",
metavar="expression_example")
parser <- add_option(parser, c("-v", "--version"), action="store_true",
default=TRUE, help="Print version output [default]")
# opt <- parse_args(parser, args = c("--help","--quietly", "--count=15"))
opt <- parse_args(parser)
if(opt$version){
cat("Version : 0.1\n")
}
snp_file = opt$snp_file
motif_file = opt$motif_file
exp_file = opt$exp_file
cat(snp_file,motif_file,exp_file,"\n")
39.比较 match
和 %in%
差别
示例 都是两个向量,包含关系操作:
%in%
返回的是TRUE和FALSE
match
返回的是位置
r$> rep(1, 3) %in% 1:5
[1] TRUE TRUE TRUE
r$> match(c(1,6) ,1:5)
[1] 1 NA
38.按照绝对值对向量排序
T<-c(-2,-1,0,1,2)
T[order(abs(T))]
37.相同组进行合并
总结:分组有时候还必须用基础函数来完成,
aggregate
,
处理前:
sample1 chr1 2
sample2 chr1 2
sample4 chr2 55
sample3 chr2 55
处理后:
Gene GOid merge
1 chr1 2 sample1,sample2
2 chr2 55 sample4,sample3
R 脚本:
aggregate分组后,V1是一个矩阵,所以使用merge=paste(.$V1[,1],.$V1[,2],sep = ",")
合并;
transmute
和mutate
差别:mutate 添加新列,trnasmute 建立新的数据框.
tmp <- read.table(file="clipbroad")
aggregate(tmp,by=list(tmp$V2,tmp$V3),unlist) %>%transmute(Gene = .$Group.1, GOid = .$Group.2,merge=paste(.$V1[,1],.$V1[,2],sep = ","))
R语言中aggregate函数
两个用法:
aggregate(x, by, FUN, ..., simplify = TRUE)
aggregate(formula, data, FUN, ..., subset, na.action = na.omit)
实现对分组后统计:前者对所有的列统计;后者对部分列统计。当然可以用到data.table的 []
高级用法。
r$> aggregate(mpg~cyl+am,mtcars,length)
cyl am mpg
1 4 0 3
2 6 0 4
3 8 0 12
4 4 1 8
5 6 1 3
6 8 1 2
r$> aggregate(mtcars,list(cyl+am),FUN=length)
Group.1 mpg cyl disp hp drat wt qsec vs am gear carb
1 4 3 3 3 3 3 3 3 3 3 3 3
2 5 8 8 8 8 8 8 8 8 8 8 8
3 6 4 4 4 4 4 4 4 4 4 4 4
4 7 3 3 3 3 3 3 3 3 3 3 3
5 8 12 12 12 12 12 12 12 12 12 12 12
6 9 2 2 2 2 2 2 2 2 2 2 2
36.R 基础语法
class查看第一层类别,mode查看第二层类别,typeof查看第三层类别
35.基础语法
1.去掉na 元素
r$> chafen-lag(chafen)
[1] NA 9 -8 9 -5 -1 -1 5 -10 -3
r$> T[!is.na(T)]
[1] 9 -8 9 -5 -1 -1 5 -10 -3
2.lag,diff 使用
r$> lag(chafen-lag(chafen))
[1] NA NA 9 -8 9 -5 -1 -1 5 -10
r$> diff(chafen-lag(chafen) )
[1] NA -17 17 -14 4 0 6 -15 7
3.R基础命令
使用n() 一般处于函数里,slice( n())
,summarize(n())
-
R 语言中的偏移窗口函数:
R 语言中有 5 个偏移窗口函数: lead ()、lag ()、first ()、last () 和 nth () 函数
-
R 语言中的排名窗口函数:
row_number ()、rank ()、dense_rank ()、ntile ()
-
R 语言中的聚合窗口函数:
sum()、cumsum()、min()、cummin()、max()、cummax()、mean()、cummean()、n()
34.R 分组运算
cowplot 插图
方法:
d[,.(),by=var] ;aggregate() ; groupby_summarize()
d <- data.table(x = 1, y = 1:10, z = factor(1:10))
d$grp=cut(as.numeric(d$z),breaks=c(0,2,5,7,11),labels = c("min", "low", "mod", "high"))
33.堆积图
微信ggplot2折线图学习之二(面积图)
R 语言绘图速查手册(58图)
32.paste和paste0差别
paste与paste0还有一个collapse
参数,可以把这些字符串拼成一个长字符串
,而不是放在一个向量
中
31.时间格式化
cat(">> generating figure...\t\t",
format(Sys.time(), "%Y-%m-%d %X"), "\n")
30.对list 每个变量进行处理,同时保留list 的名称
尝试过lapply
发现只会考虑每个变量值,不考虑变量名称,于是考虑使用mapply
添加names
参数
- 返回向量或者matrix,不是list
L=list("x"=c(1,2,3),
"y"=c(2,6,5),
"z"=c(5,4,6))
## 1.
mapply(function(x,y){paste0(sum(x)," ",y)}, L,names(L))
x y z
"6 x" "13 y" "15 z"
29.科学计数法保留一定位数
- 取整运算:ceiling(),floor(),trunc()和round()
- 有效小数:round()
- 有效数字:signif()
numb <- c(0.05, 0.05671, 0.000000027)
formatC(numb, format = "e", digits = 2)
##
[1] "5.00e-02" "5.67e-02" "2.70e-08"
28.R 函数可选参数
ont 参数只能为"BP","CC","MF" 中间一个。match.arg
f<-function(ont="CC"){
ont=match.arg(ont,c("BP","CC","MF"))
print(ont)
}
f(ont="CC")
f(ont = "CP")
27.R 并行
要传递一个变量,您将必须使用lapply或sapply类似的并行版本。但是,要传递许多变量,必须使用mapply或的并行版本Map。那会是clusterMap
library(parallel)
# 单核计算
system.time({
res <- lapply(seq(ncol(TF_Permute_matrix)), RunPairsTF);
})
# 多核并行计算
detectCores(logical = F) # 24
mc <- getOption("mc.cores", 23)
system.time({
res <- mclapply(seq(ncol(TF_Permute_matrix)), RunPairsTF,mc.cores = mc)
})
26.R 多级子目录
dir.create(work_dir, showWarnings = TRUE, recursive = FALSE,mode = "0777")
# 或者
system(paste0("mkdir -p ",work_dir))
25.向量组合,及其排列组合
### expand.grid 和combn 使用
combn(letters[1:4], 2)
# 矩阵上下旋转
apply(m1.1,rev)
# 所以的组合
expand.grid(letters[1:4],letters[1:4])
# permute函数
Permute <- function(TF_vector) {
TF_combind_matrix <- combn(TF_vector, 2)
TF_Permute_matrix <- cbind(TF_combind_matrix, apply(TF_combind_matrix, 2, rev))
return(TF_Permute_matrix)
}
> L=c("A","B","C")
> Permute(L)
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] "A" "A" "B" "B" "C" "C"
[2,] "B" "C" "C" "A" "A" "B"
> apply(Permute(L),2,function(x)paste0(x[1],x[2]))
[1] "AB" "AC" "BC" "BA" "CA" "CB"
24.R语言-NULL和NA的区别
1、R语言中,NA代表位置上的值为空,NULL代表连位置都没有,变量为空。
2、判断语句
判断向量中的元素是否没有值:is.na()
判断向量是否空值:is.null()
23.R 函数
var <<- value
...;..1;....2 # 但是函数...位置必须有参数
args() # 查询函数输入参数
formals() #查询函数参数,及其默认值
alist() # 修改函数参数
exists("dnase") # 检测变量是否存在
get("dnase")
assign("x",dnase)
22.加载不输出过程信息;下载文件
# 加载欢迎信息
.onAttach <- function(libname, pkgname) {
packageStartupMessage("Welcome to my package")
}
# 不加载欢迎信息
suppressPackageStartupMessages(library("deconstructSigs"))
# 不输出waring
options(warnings = -1)
## 下载文件
download.file(url,filename)
## 删除文件
file.remove("filename")
21.conda 创建R环境
conda create -n my-r-env -c r r-essentials
# or
# conda install -c conda-forge r-essentials
20.R读入excel 文件
install.packages("gdata")
library(gdata)
read.xls("/home/slave/test.xls",sheet=1,na.strings=c("NA","#DIV/0!"))
19. readr 读入没header 数据
- col_names=FLASE
-
列名为X1
18.R 修改默认源
[kcao@localhost ~]$ vi ~/.Rprofile
options(BioC_mirror="https://mirrors.tuna.tsinghua.edu.cn/bioconductor")
options("repos" = c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))
17.R语言关于脚本文件的输入和输出
R语言的输出函数cat,sink,writeLines,write.table
http://www.dxy.cn/bbs/thread/26662861#26662861
print
输出的字符都是只能显示在控制台,而控制台只能显示文本,所以你所说的回车、制表符都是原样显示。
r$> cat("1\n")
1
r$> print("1\n")
[1] "1\n"
实现输出重定向 ,类似linux ">>"
sink()可以重定向文本输出,但它对图形输出没有影响。要重定向图形输出,使用表中列出的函数即可。最后使用dev.off()将输出返回到终端。
实例:
sink("myoutput",append=TRUE,split=TRUE) ## 文本输出重定向
pdf("mygraph.pdf") ## 开启图形重定向
source("script.r")
sink() ## 关闭文本重定向
dev.off() ## 关闭图形重定向
16.对因子分组
library(tidyverse)
x <- tibble(
var = factor( rep( c(paste0("Factor ",1:9)),each = 4))
x%>%
mutate( collapsed__var = fct_collapse(var,
`Group 1` = c("Factor 1", "Factor 2", "Factor 3"),
`Group 2` = c("Factor 4","Factor 5","Factor 6"),
`Group 3`= c("Factor 7","Factor 8","Factor 9")) )
15.类似python append ,添加到向量里
vector=c()
for (i in 1:length(values))
vector[i] <- values[i]
14.R语言System {base}函数简介
- 函数system的作用是,调用由参数command指定的操作系统命令。
用法如下:
system(command, intern = FALSE,
ignore.stdout = FALSE, ignore.stderr = FALSE,
wait = TRUE, input = NULL, show.output.on.console = TRUE,
minimized = FALSE, invisible = TRUE)
- 例:
> a=system(paste0("cat ", filename ,"| wc -l"),intern = TRUE)
> a
[1] "9877"
13.R 数据分列
-
separate
函数。一句代码就完成了分列,而直接分列则太繁琐了,强烈推荐使用tidyr包
PS:separate函数用法
separate(data, col, into, sep = "[^[:alnum:]]+", remove = TRUE,
convert = FALSE, extra = "warn", fill = "warn", ...)
主要参数:
data:需要分列的数据框
col:分列列名
into:分列后新的列名(文本向量)
sep:分割符号
remove:逻辑值,输出时是否移去分列列
举例:
> as.data.frame(region) %>%head()
region
1 chr1:818879-819093
2 chr1:1281801-1282015
3 chr1:1291925-1292139
4 chr1:1610178-1610392
5 chr1:1883561-1883775
6 chr1:2032278-2032492
> as.data.frame(region) %>%head() %>%separate(region,into=c("chr","start","end"),sep=":|-")
chr start end
1 chr1 818879 819093
2 chr1 1281801 1282015
3 chr1 1291925 1292139
4 chr1 1610178 1610392
5 chr1 1883561 1883775
6 chr1 2032278 2032492
12.dplyr 对数字排序
- arrange(as.number())
> data%>%group_by(number)%>%summarize(mean(length))%>%ungroup()%>%separate(number,c("_","n"),"_")%>%arrange(as.numeric(n))
# A tibble: 10 x 3
`_` n `mean(length)`
<chr> <chr> <dbl>
1 number 0 188.
2 number 1 237.
3 number 2 261.
4 number 3 327.
5 number 4 390.
6 number 5 352.
7 number 6 359
8 number 8 612
9 number 9 194
10 number 16 528
11. featurecount 矩阵转换成TPM
## R 数据整理
data=read.table("featureCounts222.txt",comment="#",header=2,check.names=FALSE)
clean_data=tbl_df(data)%>%select(1,6:12)
clean_data%>%colnames()%>%as.vector()%>%str_split("/")%>%sapply(function(x){x[length(x)]})
colnames(clean_data)<-clean_data%>%colnames()%>%as.vector()%>%str_split("/")%>%sapply(function(x){x[length(x)]})
##
test_data<-head(clean_data,100)
colnames(test_data)
countToTPM<-function(test_data){
n<-length(test_data)-2
sample_name<-colnames(test_data)[-1:-2]
new_name=paste(sapply(sample_name,function(x){t1=str_split(x,"[.]");t2=unlist(t1)[1]}),"_TPM",sep="")
for (i in seq(1:6)){ ##<----1:6 可以换成1:n
Value<-test_data[sample_name[i]]*1e3/test_data["Length"]
test_data[new_name[i]]<-Value[[sample_name[i]]]
}
a<-test_data[colnames(test_data)%>%str_detect("TPM")]%>%sapply(function(x){x*1e6/sum(x)})
b<-test_data[1:8]
return(cbind(b,a))
}
TPM_data=countToTPM(clean_data)
write.table(TPM_data,file="TPM_data.csv",sep="\t",row.names=FALSE)
10.R 语言各种分布
9 迷人的多参数批量函数mapply
原创: 果子 [果子学生信](javascript:void(0);) 5月13日
1.R 批量读取png图片
library(png)
files=list.files(pattern = "*.png")
fpng<-lapply(files, readPNG)
names(fpng)<-files
# 小知识:
#> x1 = 1:10
#> x2 = 11:20
#> x3 = 21:30
#> data.frame(x1,x2,x3)
#> do.call(fun,list()) # 将list 作为一个综合参数,传给fun;\
#与lapply 作用于每个list 元素不太一样。
2.批量读取Rdata
files = list.files(pattern="*.Rdata")
fload2 = lapply(files,load,.GlobalEnv)
fload3 = lapply(files,load,environment())
fload = lapply(files, function(x) get(load(x)))
3.get / assign 类似python eval /exec
https://blog.csdn.net/u011402596/article/details/42924561
# assign 批量赋值
for(i in 1:3){
assign(paste("p", i, sep=""), i)
tmp <- get(paste("p", i, sep=""))
print(tmp)
}
[1] 1
[1] 2
[1] 3
ls()
[1] "i" "p1" "p2" "p3" "tmp"
4.mapply 和lapply 差别
A=list(A=c(5),B=c(2))
lapply(A, rep,2)
#例子理解
mapply(rep, A)
mapply(rep, times=1:4, x=4:1)
mapply(function(x,y){x^y},x=c(2,3),y=c(3,4))
# 没必要写名称,依次遍历索引元素。
mapply(function(x,y){x^y},c(a=2,b=3),c(A=3,B=4))
mapply(function(x,y){x^y},c(a=2,b=3),c(A=3,B=4),USE.NAMES=FALSE)
unlist(mapply(rep,c(1,2,6,9,14),c(1,4,5,2,3)))
8.果子归一化
-
rank
函数
1.order(): 记录排序后的位置。
2.sort 排序后数组
3.rank 排序前,记录原来的位置。可以从排序后的数组中,恢复原有模样。 -
apply
(df,2,fun,args) 用法
对列排序,同时可以对fun添加参数args
> V <-c(7, 5, 3, 1, 6, 2, 8)
> order(V)
[1] 4 6 3 2 5 1 7
> sort(V)
[1] 1 2 3 5 6 7 8
> V[order(V)]
[1] 1 2 3 5 6 7 8
> sort(V) == V[order(V)]
[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE
> rank(V)
[1] 6 4 3 1 5 2 7
> sort(V)[rank(V)]
[1] 7 5 3 1 6 2 8
Quntile Normalization 实现:
- 调用包
library(BiocInstaller)
biocLite("preprocessCore")
library(preprocessCore)
new <- normalize.quantiles(quntile_test)
- 一步步
# 归一化
quntile_test <- matrix(c(2,5,4,3,3,4,14,8,8,9,4,4,6,5,3,5,7,9,8,5),ncol=4,byrow = F)
boxplot(quntile_test)
## 写函数
df <- data.frame(c(2,5,4,3,3),c(4,14,8,8,9),c(4,4,6,5,3),c(5,7,9,8,5))
colnames(df) <- paste0("Sample",seq(1,4))
rownames(df) <- paste0("Gene",seq(1,5))
df
df_rank <- apply(df,2,rank,ties.method="first")
df_sorted <- data.frame(apply(df, 2, sort))
df_mean <- apply(df_sorted, 1, mean)
index_to_mean<-function(my_index,my_mean){
return(my_mean[my_index])
}
df_final=apply(df_rank,2,index_to_mean,df_mean)
boxplot(df_final)
7.果子学生信-统计
http://cc.shutcm.edu.cn/G2S/eWebEditor/uploadfile/20150301150144726.pdf
apply 使用,判断多列
T=data.frame(A=sample(c("+","-"),8,replace =T),B=sample(c("+","-"),8,replace =T),C=sample(c("+","-"),8,replace =T))
pd <- function(x) {
if((x[1]=="+") & (x[2]=="-")){
print( "ok")
} else {
print("no")
}
}
T$"D"=apply(T, 1, pd)
6.去除NA;保存为0
> A=data.frame(a=c(5,NA,7),b=c(6,7,NA))
> A
a b
1 5 6
2 NA 7
3 7 NA
> write.table(A,file = "test.csv",na = "0")
5.p.adjust 调整
Gene = 1:7
t.values = c(-0.66, 1.02, 3.2, 2.7, 1.1, 2.5, 0.33)
p.values = 2 * pt(abs(t.values), df = 100, lower.tail = FALSE)
p.BH = p.adjust(p.values, method="BH")
p.B = p.adjust(p.values, method="bonferroni")
### Make things pretty ###
p.values = round(p.values, 3)
p.BH = round(p.BH, 3)
p.B = round(p.B, 3)
S.BH = p.BH < 0.05
S.B = p.B < 0.05
Data = data.frame(Gene, t.values, p.values, p.BH, S.BH, p.B, S.B)
Data
### Gene t.values p.values p.BH S.BH p.B S.B
### 1 -0.66 0.511 0.596 FALSE 1.000 FALSE
### 2 1.02 0.310 0.434 FALSE 1.000 FALSE
### 3 3.20 0.002 0.013 TRUE 0.013 TRUE
### 4 2.70 0.008 0.029 TRUE 0.057 FALSE
### 5 1.10 0.274 0.434 FALSE 1.000 FALSE
### 6 2.50 0.014 0.033 TRUE 0.098 FALSE
### 7 0.33 0.742 0.742 FALSE 1.000 FALSE
4.apply and sweep
通常先进行apply 在对统计结果进行sweep 操作。
用
apply
及其sweep
进行Z-score
标准化(表达量-均值)/标准差
t()可以对矩阵转置,sweep() 可以按行按列进行处理原始数据,因为默认是按照列处理。
# 行为基因,列为样本,现在对基因进行标准化
standardize <- function(x) {
rowmean <- apply(x, 1, mean)
rowsd <- apply(x, 1, sd)
rv <- sweep(x, 1, rowmean,"-") #表达量-均值
rv <- sweep(rv, 1, rowsd, "/") #再除以标准差
return(rv)
}
sweep 使用
> test <- matrix(c(1,2,3,11,12,13),nrow = 2,ncol=3)
> test
[,1] [,2] [,3]
[1,] 1 3 12
[2,] 2 11 13
> depth
[1] 3 14 25
> sweep(test,2,depth,"/")
[,1] [,2] [,3]
[1,] 0.3333333 0.2142857 0.48
[2,] 0.6666667 0.7857143 0.52
# 或者
t(t(test)/colSums(test))
3.读R书笔记-中文电子书
## 1.创建data.frame
data <- read.table(header = T, text = "
subject sex size
1 M 7
2 F 6
3 F 9
4 M 11
")
x <- 6
n <- 1:4
let <- LETTERS[1:4]
df <- data.frame(n, let)
vx <- c(1, 2, 3, NULL, 5)
mean(vx)
a <- "apple"
b <- "banana"
as.formula("y ~ x1 + x2")
##2 .collapse 向量内拼接
measurevar <- "y"
groupvars <- c("x1", "x2", "x3")
# 存在一些变量名:
measurevar <- "y"
groupvars <- c("x1", "x2", "x3")
# 创建合适的字符串:
paste(measurevar, paste(groupvars, collapse = " + "), sep = " ~ ")
5.数据导入与导出
###3.选择文件
read.csv(file.choose())
#从网上下载数据框
data <- read.csv("http://www.cookbook-r.com/Data_input_and_output/Loading_data_from_a_file/datafile-noheader.csv",
header = FALSE)
#从键盘上输入的方法之一
data <- read.table(stdin(), header=TRUE)
# 从剪切板
data <- read.table('clipboard', header=TRUE)
# 可以将带分隔符的数据写入终端( stdout() )
write.csv(data, stdout(), row.names=FALSE)
# 重定向到文件
sink()
6.数据处理
# 去重unique(x)
# cut 实现多个条件判断功能
data$category <- cut(data$control, breaks = c(-Inf, 7, 9,
Inf), labels = c("low", "medium", "high"))
#forcats package https://github.com/tidyverse/forcats
fct_reorder(): Reordering a factor by another variable.
fct_infreq(): Reordering a factor by the frequency of values.
fct_relevel(): Changing the order of a factor by hand.
fct_lump(): Collapsing the least/most frequent values of a factor into “other”.
# 数据框与列联表互换
table(cases)
as.data.frame(table(cases))
2. 计算标准误差std.err
library(dplyr)
aspen %>%
group_by(year,Spp,CO2) %>%
summarise_each(funs(mean,sd,se=sd(.)/sqrt(n())))
library(plotrix)
summary <- aspen %>% group_by(year,Spp,CO2) %>%
summarise_each(funs(mean,sd,std.error)))
1. R循环赋值
x=array(,c(3,4,2))
for(i in 1:2){
for(j in 1:3){
x[j,,i]=j+i
}
}
R 判断元素是否在vertor 中
which match any == %in%
# mat 为矩阵,dev为被除的num
t(t(mat) / dev)
mat / dev[col(mat)] # @DavidArenburg & @akrun
mat %*% diag(1 / dev)
sweep(mat, 2, dev, "/")
t(apply(mat, 1, "/", dev))
plyr::aaply(mat, 1, "/", dev)
mat / rep(dev, each = nrow(mat))
mat / t(replace(t(mat), TRUE, dev))
mapply("/", as.data.frame(mat), dev) # added later
mat / matrix(dev, nrow(mat), ncol(mat), byrow = TRUE) # added later
do.call(rbind, lapply(as.data.frame(t(mat)), "/", dev))
mat2 <- mat; for(i in seq_len(nrow(mat2))) mat2[i, ] <- mat2[i, ] / dev