最近一段时间又开始了忙碌的临床生活,但是强度不算太大,所以也有闲暇时间去继续学习R语言。我一直自诩为一个‘功利的实用主义者’,简单说就是只学习能用的东西,并且只学习怎么用。显然,我在生信方面的野心不允许我那么做,所以还是从头学起吧,毕竟R也是一门编程语言,毕竟我以前也没接触过编程。或许是自己从未完全跳出过舒适圈,在我之前的经历中,总是认为我这种“功利的实用主义者”可以把复杂的问题简单化,把抽象的问题具体化,确实,我做到了,但是那是因为我总是有这些方面的知识基础,所有我才能作为一名“功利的实用主义者”,但是这是我学习R语言遭遇的原罪,带着这个原罪,我开始了我的啃书计划,从最基础的那些命令和变换看起。
下面是我的一些练习,一边看视频,一边敲的代码,很多是自己已经学会的,但是代码不敲个100遍,怎么能算是学会了那?
rm(list = ls())
setwd('C:\\Users\\Solomonteng\\Desktop\\learn R')
##seq函数,得到一组向量
x <- seq(1,100,length.out = 20) ##生成向量,从1到100,等差数列共20个向量
index <- x > 80
x[index] ##方括号传输的是下标(index),得到x中大于80的向量
##which()得到向量的下标
which(x > 80) ##找到x中大于80的向量的下标
x[which(x > 80)] ##得到x中大于80的向量
index <- x > 80 & x < 90
x[index]
which(x > 80 & x < 90)
x[which(x > 80 & x < 90)]
##字符串
string <- c('abc','def',1,2)
string
class(string[3]) ##判断数据类型
letters ##内置英文字母表
rm(list = ls())
##因子型变量,也就是分类变量,因子由字符串变来
my_fac <- factor(x = rep(c(1,2),times=5),levels =c(1,2),labels = c('Male','Female'))
class(my_fac)
my_fac2 <- factor(LETTERS[1:5],labels = letters[1:5])
my_fac2
my_fac3 <- factor(1:5,labels = letters[1:5])
my_fac3
##gl()生成因子变量
my_fac4 <- gl(n=2,k=5,labels = c('Control','Treatment')) ##n表示几个因子,k表示每个因子有几个
my_fac4
my_fac5 <- gl(n=2,k=1,length = 8,labels = c('Control','Treatment'))
my_fac5
temp_string <- c('A','B','AB','O')
my_fac6 <- as.factor(temp_string)
my_fac6
as.character(my_fac6)
nlevels(my_fac6) ##查看因子有几个水平,就是有几个分类
levels(my_fac6) ##查看有哪几个因子
##哑变量,和reference对比
my_fac7 <- relevel(my_fac6,ref = 'B')
my_fac7
my_fac6
x <- c('Placebo','10mg','20mg','50mg')
my_order_fac <- factor(x,ordered = TRUE) ##把placebo当成了最大的,有问题
install.packages('DescTools')
library(DescTools)
##用DescTools包的reorder.factor重新排列因子
my_order_fac2 <- reorder.factor(my_order_fac,new.order = x)
my_order_fac2
##------------------------------------------------------------------------
##list & matrix
rm(list = ls())
my_list <- list(1,2,3,'R','nihao',TRUE,FALSE)
my_list2 <- list(1:10,letters[1:5])
#在my_list2这个列表中找到‘a’元素
my_list2[1]
class(my_list2[1]) ##第一层依然是个list
my_list2[[1]]
class(my_list2[[1]]) ##第二层已经变为integer
my_list2[[2]][1] ##第二层的第一个元素,就是‘a’
my_list3 <- list(1:10,letters[1:5],list(11:14,LETTERS[1:5]))
## 从my_list3中找到‘A’
my_list3[[3]][[2]][1]
## 矩阵matrix
my_matrix <- matrix(data = 1:6,nrow = 2,byrow = TRUE)
my_matrix2 <- matrix(data = 1:10,nrow = 5)
my_matrix3 <- matrix(data = 2,nrow = 3,ncol = 4)
my_matrix4 <- matrix(data = letters[1:3],nrow = 2,ncol = 4)
## dimnames 命名矩阵
my_matrix5 <- matrix(data = 1:12,nrow = 3,ncol = 4,
dimnames = list(c('a','b','c'),c('v1','v2','v3','v4')))
##转置,行和列交换,t()函数
t(my_matrix5)
my_matrix6 <- matrix(c(1:5,letters[1:5]),nrow = 2) ##矩阵的元素是一致的
看完书,对知识体系有印象,再跟着视频练习,真的进步很快,我给自己大概2个月的时间,成为一个算得上懂R语言的使用者,这个可能很抽象,大概意思就是看得懂绝大部分我能用到的生信分析的代码,并且可以自己解决问题,希望自己可以做到。