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()里面
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
            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"

  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 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 = ",")合并;
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
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"))
3.R 杂笔记-基础语法_第1张图片
image.png

33.堆积图

微信ggplot2折线图学习之二(面积图)
R 语言绘图速查手册(58图)

3.R 杂笔记-基础语法_第2张图片
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))
     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 函数可选参数

参数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张图片
    image.png

18.R 修改默认源

  • Y叔
  • r-magick 包
  • 大队长修改镜像
[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()将输出返回到终端。

3.R 杂笔记-基础语法_第4张图片

实例:

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 杂笔记-基础语法_第5张图片
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 杂笔记-基础语法_第6张图片
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
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)`
               
 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 语言各种分布

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


3.R 杂笔记-基础语法_第9张图片
image.png

7.果子学生信-统计

3.R 杂笔记-基础语法_第10张图片
image.png

http://cc.shutcm.edu.cn/G2S/eWebEditor/uploadfile/20150301150144726.pdf

3.R 杂笔记-基础语法_第11张图片
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
   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循环赋值

如何计算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 & @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

你可能感兴趣的:(3.R 杂笔记-基础语法)