[GuangZhou_Biotrainee]R语言基础_1

补充[ZHUHAI_Biotrainee] 第一周_课堂总结内容:https://www.jianshu.com/p/bbe94addb8ba

一、R及RStudio介绍
1、R的数据类型:

A、以下三类:

数值型
字符型
逻辑型

B、判断数据类型:

class()
is.numeric/is.character/is.logical

2、数据结构

一维:向量
二维:矩阵、数据框、list;与一维相同,都必须含有一个数据类型;

3、List

总览概况:

列表

元素

向量、矩阵、数据框、list

索引也是这样层层递进的关系

二、脚本1:script1_vector_creat
1、rep()函数,区分其中的参数,each、times

Eg1:times

> ve2<-1:3
> ve2
[1] 1 2 3
> ve4<-rep(x =ve2,times=3)####常用的创建向量的函数3 rep
> ve4
[1] 1 2 3 1 2 3 1 2 3

对ve4中的所有元素按照逻辑循环三次
Eg2:each

> a <- c(1,2,3)  
> a
[1] 1 2 3
> rep(a,c(3,4,5))
 [1] 1 1 1 2 2 2 2 3 3 3 3 3

依次对a中的单个元素进行单独设置循环数

2、区分paste()以及paste0()

paste:默认的分割符(空格)
paste0:默认无分隔符
Egpaste:

> a<-c('I')
> b<-c('like')
> f<-c('I','You','She','He')
> tmp<-c('Chandeler','Ross','Rachel','Monica','Joey','Pheebe')
> paste(a,b,tmp)
[1] "I like Chandeler" "I like Ross"      "I like Rachel"    "I like Monica"    "I like Joey"     
[6] "I like Pheebe"

paste有分隔符,如果有分隔符,可以添加sep = ''

> paste(a,b,tmp,sep = '')
[1] "IlikeChandeler" "IlikeRoss"      "IlikeRachel"    "IlikeMonica"    "IlikeJoey"      "IlikePheebe"  

Egpaste0

> paste0(a,b,tmp)
[1] "IlikeChandeler" "IlikeRoss"      "IlikeRachel"    "IlikeMonica"    "IlikeJoey"      "IlikePheebe" 

与上一个例子> paste(a,b,tmp,sep = '')

3、length()查看元素个数
三、脚本3:script3_vector_math
1、运算法则

%%:取余数 (注意:%%取余数用的时候较多)
%/%:取整数
!= 判断是否不完全相等,因为有
== ①判断是否完全相等;②返回的结果为逻辑值
与或非
实战%%题目如下:

a<-seq(1,10,1);找出a中的奇数(练习使用操作符)

> a<-seq(1,10,1)
> a
 [1]  1  2  3  4  5  6  7  8  9 10
> a%%2
 [1] 1 0 1 0 1 0 1 0 1 0
> a[a%%2==1]
[1] 1 3 5 7 9
四、脚本4:script4_matrix
1、取出奇偶行、利用逻辑值(T、F)/(1、0)

实战题目:

1.获取e的奇数行内容
2.获取e的偶数行内容

> e<-LETTERS[1:24]
> e
 [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X"
> dim(e)<-c(6,4)
> e
     [,1] [,2] [,3] [,4]
[1,] "A"  "G"  "M"  "S" 
[2,] "B"  "H"  "N"  "T" 
[3,] "C"  "I"  "O"  "U" 
[4,] "D"  "J"  "P"  "V" 
[5,] "E"  "K"  "Q"  "W" 
[6,] "F"  "L"  "R"  "X" 
> e_t<-1:nrow(e)
> e[e_t%%2==1,]
     [,1] [,2] [,3] [,4]
[1,] "A"  "G"  "M"  "S" 
[2,] "C"  "I"  "O"  "U" 
[3,] "E"  "K"  "Q"  "W" 
> a[a%%2==1]
[1] 1 3 5 7 9
> e[e_t%%2==0,]
     [,1] [,2] [,3] [,4]
[1,] "B"  "H"  "N"  "T" 
[2,] "D"  "J"  "P"  "V" 
[3,] "F"  "L"  "R"  "X

思路:
①明确e是矩阵,dim()
②对1:nrow()中才可以选择奇数偶数行
a%%2的结果为1,0 根据1,0而选择奇数偶数行

2、head(),tail()函数

可以对其中的参数n进行设置;head()取首;tail()取尾

五、脚本5:script5_dataframe
1、对数据框的索引用[](位置、名字、逻辑值),另外还可以用$(matrix,向量不可以用)
> date<-c(21,22,23,35,52)
> plan<-c('mon','tue','wed','thur','fri')
> color<-c('green','red','white','black','purple')
> April<-data.frame(date,plan,color)
> April
  date plan  color
1   21  mon  green
2   22  tue    red
3   23  wed  white
4   35 thur  black
5   52  fri purple
> April$date[2]
[1] 22

实战:索引出April数据框的第2到4行第3列的元素(两种方法)

> April[2:4,3]
[1] "red"   "white" "black"
> April[2:4,"color"]
[1] "red"   "white" "black"
> April[c(F,T,T,T,T,F),"color"]
[1] "red"    "white"  "black"  "purple"
> April[c(F,T,T,T,T),"color"]
[1] "red"    "white"  "black"  "purple"
六、脚本6:script6_list
1、str()函数,查看数据结构

Eg:

> str(r_list)
List of 4
 $ flag: chr "Hello world"
 $ yes : int [1:5] 1 2 3 4 5
 $     : int [1:5, 1:2] 1 2 3 4 5 6 7 8 9 10
 $     : chr [1:3] "mon" "tue" "wed"
七、脚本7:script7_read_a_file
1、读入文件:read.csv/table

①读进来存储数据格式的都是data.frame;
②reead.csv默认分隔符为逗号,read.table默认分隔符为一个或者多个空格、制表符、换行符、回车
③row.names = 1 将第一列作为行名
存成文件:'0418.txt'中后缀是告诉用什么文件打开;
comment.char = '!' 去掉!部分 注释符号
常见:

d<-read.csv('GSE17215_series_matrix.txt.gz',
            comment.char = '!',sep='\t',row.names = 1)
f<-read.table('GSE17215_series_matrix.txt.gz',
              comment.char = '!',
              header=T,
              row.names = 1)
2、输出文件:write.table/write.csv

编码文件:write.table/write.csv用什么编码格式编码文件,从而对应不同的保存格式,csv代表用对csv编码文件,table代表txt编码文件
存成文件:'0418.txt'中后缀是告诉用什么文件打开,若‘0908.csv’代表用csv格式打开:
Eg:

write.table(x = f,file = '0418.txt')
save(f,file = '17215.Rdata')

save对应Rdata等形式的保存文件;table对应txt;csv对应csv;

八、packages

1、思路:
代码+说明文档+数据集
删除包:remove.packages()
2、若一次性安装多个R包,可使用如下代码:

#library("monocle")
BiocManager::install("slingshot")
options(BioC_mirror="http://mirrors.ustc.edu.cn/bioc/")
options("repos" = c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))
options()$repos
options()$BioC_mirror

shanshan <- c("scatterplot3d",
"made4",
"pheatmap",
"matrixStats",
"statmod",

"FactoMineR",
"jackstraw",

"ReactomePA",
"org.Mm.eg.db",
"clusterProfiler",
"GOSemSim",
"arulesViz",

"ggpubr")




packages=(shanshan
)
ipak <- function(pkg){
  new.pkg <- pkg[!(pkg %in% installed.packages()[, "Package"])]
  if (length(new.pkg)) 
    BiocManager::install(new.pkg, dependencies = TRUE)
  sapply(pkg, require, character.only = TRUE)
}
ipak(packages)



library("taRifx")
library("matrixStats")
library("ggplot2")
library("Rtsne")

修改包名,注意检查R包是否安装成功。

九、脚本9:script9_for_apply_function
1、for()函数

①for函数的格式:for(循环数){},其中x代表了for循环数数,{}是要执行的操作
例:for(i in 1:nrow(test)){test_r[i,1]<-mean(c(test[i,1],test[i,3]))test_r[i,2]<-paste0(test[i,2],test[i,4]) }
②使用for函数时,要对for的输出结果有了解

实战:
实现每行的第1个和第3个元素取均值,第2个和第4个元素无缝连接在一起

> test<-data.frame(a=seq(1,10,2),
+                  b=seq(2,11,2),
+                  c=seq(11,20,2),
+                  d=c('mon','tues','wednes','thurs','fri'))
> test
  a  b  c      d
1 1  2 11    mon
2 3  4 13   tues
3 5  6 15 wednes
4 7  8 17  thurs
5 9 10 19    fri
> test_r<-data.frame()
> for(i in 1:nrow(test)){
+   test_r[i,1]<-mean(c(test[i,1],test[i,3]))
+   test_r[i,2]<-paste0(test[i,2],test[i,4])
+ }
> test_r
  V1      V2
1  6    2mon
2  8   4tues
3 10 6wednes
4 12  8thurs
5 14   10fri

思路:
①根据题目要求,首先明确输出的结果为data.frame
②设置空载容器,用来装输出结果,所以设置空向量 test_r<-data.frame()
②for函数的()里:是对每一行的元素进行操作,所以设置参数i,并且为i:nrow(test),对每一行循环操作
③for函数的{}里:根据题意,取出元素并输入相应函数mean(),paste0()

2、funcation()函数以及apply()函数

往往apply()函数不能单独使用,需要结合funcation()函数
funcation()函数
①funcation()函数的格式为funcation(x){},x为设置的参数,{}里面是对参数执行的相应代码

实战:
用function和apply求出test里每行1、2、3个元素的标准差和平均值,并第4个元素后添加'day';

> test<-data.frame(a=seq(1,10,2),
+                  b=seq(2,11,2),
+                  c=seq(11,20,2),
+                  d=c('mon','tues','wednes','thurs','fri'))
> tes
>y<-function(x){
  mean_row<-mean(as.numeric(c(x[1],x[2],x[3])))
  sd_row <- sd(as.numeric(c(x[1],x[2],x[3])))
  str_paste<-paste0(x[4],"day")
  result<-c(mean_row,str_paste,str_paste)
  return(result)
}
>test1<-apply(test,1,y)
test1

注意:
①funcation中x为参数,是定义该函数的一个参数。而对每一行进行操作,是在apply中的1表现出来的;
②在定义funcation的参数时,我们要斟酌好x代表的含义,根据题目要求,是对每一行进行操作操作,这里x代表每行;所以在funcation{}里对参数执行代码时,应该表示出每一行的第几个元素。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,352评论 0 5
  • 个人学习批处理的初衷来源于实际工作;在某个迭代版本有个BS(安卓手游模拟器)大需求,从而在测试过程中就重复涉及到...
    Luckykailiu阅读 4,670评论 0 11
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,039评论 0 3
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,307评论 0 2
  • 第 2 章 SHELL 基础知识2.1 shell脚本我们在上面简单介绍了一下什么是shell脚本,现在我们来进一...
    LiWei_9e4b阅读 1,547评论 0 0