3.R|3.R 杂笔记-基础语法

  • linux 安装R
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.正则表达式 (\ 与\) image.png
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 文件夹
    参数:libdestdir :分别指出文件下载的位置,以及解压后安装到位置。如果lib 不写,默认解压安装到 libPath()里面
3.R|3.R 杂笔记-基础语法
文章图片
image.png
  • 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 V1V3V4V5V6V7V8 1chr17,chr170.0055393550.0390440000.1220988040.15646555 0.029447750.001091181 2chr11,chr17 -0.002308293 -0.021429420 -0.0151624630.09823601 0.07250968 -0.004267148 3chr17,chr6 -0.002009416 -0.0105061680.0574012880.08913235 0.04825522 -0.004040490 4chr1,chr170.010890329 -0.0013552570.0505419600.05530440 0.05670207 -0.005107226 5chr17,chr20.0153381740.0114128340.037120402 -0.03438133 0.02997743 -0.020807328 6chr17,chr190.0113522590.0054578970.0171938130.07226271 0.05071934 -0.007017304 7chr17,chr9 -0.016986335 -0.0097846640.0457984580.07713509 0.05663328 -0.013103256 8chr12,chr17 -0.016105516 -0.0367332030.0073333340.19082880 0.090369520.006711165 9chr17,chr210.018684294 -0.016253024 -0.017760037 -0.05845185 0.05585530 -0.020302733 10 chr16,chr170.0390562750.0129036010.029835701 -0.06858563 0.03015597 -0.015712518 V9V10V11 V12 10.0221127890.069530450 0.0060176650 20.003515933 -0.011290263 0.0121232190 30.0083407480.050997686 0.0066659310 4-0.0308976080.023426734 0.0044654040 5-0.040782742 -0.042077541 0.0076964710 6-0.0076381390.016115718 0.0075520800 70.0138010190.002422534 0.0057661330 80.0365353450.034734201 0.0120559830 9-0.056969829 -0.079630174 0.0092677300 10 -0.054881822 -0.003083119 0.0057092100> test2 nodeA category 1chr1,chr40 2chr17,chr190 3chr11,chr180 4chr2,chr70 5chr11,chr190 6chr13,chr90 7chr19,chr90 8chr11,chr120 9chr1,chr160 10chr5,chr60################################ 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数据对象处理函数(三)-精确、部分和完全匹配 【3.R|3.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"
  1. 在帮助信息里面展示 实例的输入参数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 chr12 sample2 chr12 sample4 chr255 sample3 chr255 处理后: Gene GOidmerge 1 chr12 sample1,sample2 2 chr255 sample4,sample3

R 脚本:
aggregate分组后,V1是一个矩阵,所以使用merge=paste(.$V1[,1],.$V1[,2],sep = ",")合并;
transmutemutate 差别: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 1403 2604 38012 4418 5613 6812r$> aggregate(mtcars,list(cyl+am),FUN=length) Group.1 mpg cyl disp hp drat wt qsec vs am gear carb 1433333333333 2588888888888 3644444444444 4733333333333 58121212 1212 1212 12 121212 6922222222222

36.R 基础语法 class查看第一层类别,mode查看第二层类别,typeof查看第三层类别
35.基础语法 1.去掉na 元素
r$> chafen-lag(chafen) [1]NA9-89-5-1-15 -10-3 r$> T[!is.na(T)] [1]9-89-5-1-15 -10-3

2.lag,diff 使用
r$> lag(chafen-lag(chafen)) [1]NANA9-89-5-1-15 -10 r$> diff(chafen-lag(chafen) ) [1]NA -1717 -14406 -157

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"))

3.R|3.R 杂笔记-基础语法
文章图片
image.png 33.堆积图 微信ggplot2折线图学习之二(面积图)
R 语言绘图速查手册(58图)
3.R|3.R 杂笔记-基础语法
文章图片
image.png 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)) xyz "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 函数可选参数 参数match.arg
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() 所有可能组合
### 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

    3.R|3.R 杂笔记-基础语法
    文章图片
    image.png
18.R 修改默认源
  • Y叔
  • r-magick 包
  • 大队长修改镜像
[kcao@localhost ~]$ vi ~/.Rprofileoptions(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") 1r$> print("1\n") [1] "1\n"

实现输出重定向 ,类似linux ">>"
sink()可以重定向文本输出,但它对图形输出没有影响。要重定向图形输出,使用表中列出的函数即可。最后使用dev.off()将输出返回到终端。
3.R|3.R 杂笔记-基础语法
文章图片

实例:
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")) )

3.R|3.R 杂笔记-基础语法
文章图片
image.png 15.类似python append ,添加到向量里
  • https://codeday.me/bug/20170719/43080.html
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)

3.R|3.R 杂笔记-基础语法
文章图片
image.png
  • 例:
> 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 1chr1: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=":|-") chrstartend 1 chr1818879819093 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)` 1 number 0188. 2 number 1237. 3 number 2261. 4 number 3327. 5 number 4390. 6 number 5352. 7 number 6359 8 number 8612 9 number 9194 10 number 16528

11. featurecount 矩阵转换成TPM
## R数据整理 data=https://www.it610.com/article/read.table("featureCounts222.txt",comment="#",header=2,check.names=FALSE) clean_data=https://www.it610.com/article/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=https://www.it610.com/article/countToTPM(clean_data) write.table(TPM_data,file="TPM_data.csv",sep="\t",row.names=FALSE)

10.R 语言各种分布3.R|3.R 杂笔记-基础语法
文章图片
image.png 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)

3.R|3.R 杂笔记-基础语法
文章图片
一步步过程
  • 一步步
# 归一化 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)) dfdf_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)

3.R|3.R 杂笔记-基础语法
文章图片
image.png 7.果子学生信-统计3.R|3.R 杂笔记-基础语法
文章图片
image.png http://cc.shutcm.edu.cn/G2S/eWebEditor/uploadfile/20150301150144726.pdf
3.R|3.R 杂笔记-基础语法
文章图片
image.png 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 ab 156 2 NA7 37 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.05Data = https://www.it610.com/article/data.frame(Gene, t.values, p.values, p.BH, S.BH, p.B, S.B)Data###Gene t.values p.valuesp.BHS.BHp.BS.B ###1-0.660.511 0.596 FALSE 1.000 FALSE ###21.020.310 0.434 FALSE 1.000 FALSE ###33.200.002 0.013TRUE 0.013TRUE ###42.700.008 0.029TRUE 0.057 FALSE ###51.100.274 0.434 FALSE 1.000 FALSE ###62.500.014 0.033TRUE 0.098 FALSE ###70.330.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,]1312 [2,]21113 > 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 = " subjectsex size 1M7 2F6 3F9 4M11 ") 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 packagehttps://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循环赋值 如何计算FIMO score
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%
R 语言矩阵除法
# mat 为矩阵,dev为被除的num t(t(mat) / dev)mat / dev[col(mat)] #@DavidArenburg & @akrunmat %*% 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 latermat / matrix(dev, nrow(mat), ncol(mat), byrow = TRUE)# added laterdo.call(rbind, lapply(as.data.frame(t(mat)), "/", dev))mat2 <- mat; for(i in seq_len(nrow(mat2))) mat2[i, ] <- mat2[i, ] / dev

    推荐阅读