R语言基础--向量

R-基础-向量

  • 运行代码快捷键:ctrl + enter

  • tab 补全

  • 控制台清屏:ctrl +l

  • 赋值(<-):alt + -

  • 放大字体:tools => global options => appearance => zoom => 150%

  • 符号皆为英文符号

  • ?函数名,查看帮助文档

  • 设置工作目录

setwd('E:\bioinfo_study\one')#设置工作目录
Error: '\o' is an unrecognized escape in character string starting "'E:\bioinfo_study\o" 
##报错原因,我直接在文件夹那里复制路径,里面的\,R无法识别,手动改/,即可
##其他错误还可能有,路径当中的文件夹不存在
setwd('E:/bioinfo_study/one')
getwd()
[1] "E:/bioinfo_study/one"

常量和变量

  • 基本的数据类型有数值型, 逻辑型(TRUE, FALSE),文本(字符串)
> a <- 1:10
> a
 [1]  1  2  3  4  5  6  7  8  9 10
> typeof(a)
[1] "integer"#数值型 (整型) ##double浮点型
> a <- "good"
> a
[1] "good"
> typeof(a)
[1] "character"#字符型
> a <- TRUE
> typeof(a)
[1] "logical"#逻辑型,一般产生自比较

####类型转换
as.numeric() #转化为数值型
as.logical() #转化为逻辑型
as.character()#转化为字符型
  • 常量:数值、字符串、逻辑(TRUE、FALSE)

  • 变量:用来保存输入的值或者计算得到的值(赋值的对象

    变量都有变量名,R变量名必须以字母、数字、下划线和句点组成, 变量名的第一个字符不能取为数字。 变量名是区分大小写的, yY是两个不同的变量名

    数据结构之向量

    • 向量赋值,及其基础操作

      1. 赋值
        ####字符串元素,用单引号或者双引号
        > name<-'xiaohong'
        > name
        [1] "xiaohong" #一个元素的向量
        ####数值元素
        ##直接写一个数字
        > b <- 2
        > b
        [1] 2
        ​
        ####用c()函数把多个元素或向量组合成一个向量
        #元素以逗号分隔,元素的序号(下标)从1开始计数
        > marks <- c(10, 6, 4, 7, 8)
        > marks
        [1] 10  6  4  7  8
        > x <- c(1:3, 10:13) # 冒号左右都能取到
        > x
        [1]  1  2  3 10 11 12 13
        > x1 <- c(1, 2)
        > x2 <- c(3, 4)
        > x3 <- c(x1, x2) # 2组向量拼成1组,还是向量(一维的)
        > x3
        [1] 1 2 3 4  
        > print(x3) #显示向量除了直接输入向量名,还可以用 print()
        [1] 1 2 3 4
        > name <- c('AA','BB','CC')
        > name
        >[1] "AA" "BB" "CC"
        ​
        ####用seq 生成连续的数值
        > x4 <- seq(4)
        > x4
        >    [1] 1 2 3 4
        > x4 <- seq(2:4)
        > x4
        >    [1] 1 2 3
        > x4 <- 2:4 ##可以直接用冒号,表示2到4,2和4都能取到
        > x4
        >    [1] 2 3 4</pre>
        
      2. 数值型向量基础操作
        > length(x3)
        [1] 4
        ####使用 [] 根据元素的下标取值,单独一个下标或者【】里面填起始位置和终止位置,冒号连接
        #x[2]取出第二个元素
        #x[2] <- 99 修改第二个元素为99
        #x[c(1,3)] 取出第1、3号元素
        > x
        [1]  1  2  3 10 11 12 13
        > x[1:4] 
        [1]  1  2  3 10
        ###which 返回的是满足条件的元素的下标
        > which.max(x)
        [1] 7 #下标
        > which.min(x)
        [1] 1 #下标
        ##如果用substring是什么效果,这个函数看名字就知道是在字符串中使用的
        > print(x3)
        [1] 1 2 3 4
        > substring(x3,2,3) 
        [1] "" "" "" ""   #但是也并没有报错
        > x3[2:3]
        [1] 2 3
        ​
        #######
        ######四则运算用+ - * / ^表示(加、减、乘、除、乘方),略
        #四则运算时如果有缺失值,缺失元素参加的运算相应结果元素仍缺失
        #等长向量的运算为对应元素两两运算
        #两个不等长向量的四则运算,规则是每次从头重复利用短的一个,示例如下
        > x1 <- c(1, 2) #2个元素
        > x4
        [1] 2 3 4 #3个元素
        > x1+x4
        [1] 3 5 5 # 先按下标对应相加,然后循环长度短的那个,即1+4=5
        Warning message: ###两个向量的长度不是倍数关系会发出警告
        In x3 + x4 :
         longer object length is not a multiple of shorter object length
        ​
        #除法取整
        > 5 %/% 3
        [1] 1
        #取余
        > 5 %% 3
        [1] 2
        ###取余的一个应用是,判断某数是不是偶数、3的倍数、5的倍数等
        x %% 2 == 0
        ​
        ######基础常用统计函数
        > x <- c(33, 55, 11)
        > sort(x) ##正序
        [1] 11 33 55
        > rev(sort(x))  ##倒序
        [1] 55 33 11
        > order(x) ##正序的下标
        [1] 3 1 2
        > sum(x) #和
        [1] 99
        > mean(x) #均值
        [1] 33
        > var(x) #方差
        [1] 484
        > sd(x) #标准差
        [1] 22
        > min(x)
        >    [1] 11
        > max(x)
        >     [1] 55
        > prod(x) #乘积
        >    [1] 19965
        > cumsum(1:5) #1 2 3 4 5累加
        >    [1]  1  3  6 10 15  #一步一步累加的和
        > cumprod(1:5)
        >    [1]   1   2   6  24 120 #一步一步累乘的积
        > sqrt(c(1, 4, 6.25))
        >    [1] 1.0 2.0 2.5  #平方根
        ​
         ######其他函数
         #如log10
        ​
        > a <- c(1,10,100)
        > a
        >    [1]   1  10 100
        > log10(a)
        >    [1] 0 1 2</pre>
        

      “为了查看这些基础的数学函数的列表,运行命令help.start(), 点击链接“Search Engine and Keywords”, 找到“Mathematics”栏目, 浏览其中的“arith”和“math”链接中的说明”
      --R语言教程

      1. 逻辑型向量

        逻辑值一般产生自比较、判断

      > c(1, 3, 5) > 2
      [1] FALSE  TRUE  TRUE
      > (1:4) >= (4:1)
      [1] FALSE FALSE  TRUE  TRUE
      > c(1, NA, 3) > 2
      [1] FALSE    NA  TRUE
      > NA == NA
      [1] NA
      ####使用 is.na 判断值是否是NA
      > is.na(c(1, NA, 3))
      [1] FALSE  TRUE FALSE
      ####比较运算符 <   <=  >  >=  ==  !=  %in%
      ### x %in% y,判断x向量中的元素能否在y中找到
      > c(NA,3) %in% c(2,3,4)
      [1] FALSE  TRUE
      > c(3,4) %in% c(2,3,4) ##无论下标一致与否,找到就是true
      [1] TRUE TRUE
      ####
      > match(c(1, 3), c(2,3,4,3))
      [1] NA  2
      
      #####逻辑运算符 与 &   或 |     非 !
      > 1==2&3!=4
      [1] FALSE
      > 1==2|3!=4
      [1] TRUE
      #####使用 all 判断逻辑向量的所有元素为真,全部为真,则TRUE
      > c(1, NA, 3) > 2
      [1] FALSE    NA  TRUE
      > all(c(1, NA, 3) > 2)
      [1] FALSE
      ####使用 any 判断逻辑向量的至少有一个元素为真
      > any(c(1, NA, 3) > 2)
      [1] TRUE
      ##返回真值的下标
      > which(c(1, NA, 3) > 2)
      [1] 3
      
      #####使用 identical(x,y) 比较xy的内容是否完全相同
      > identical(c(1,2,3), c(1,2,NA))
      [1] FALSE
      > identical(c(1,2,3), c(1,2,3))
      [1] TRUE
      #### 使用 duplicated 判断重复
      > duplicated(c(1,2,1,3,NA,4,NA))
      [1] FALSE FALSE  TRUE FALSE FALSE FALSE  TRUE #第一次出现不会被认为重复
      ####使用 unique 去重
      > unique(c(1,2,1,3,NA,4,NA))
      [1]  1  2  3 NA  4 #顺序还是原来的第一次出现的那个</pre>
      
      1. 字符型向量基础操作
      > ############################## 拼接 ###############################
       > a <- 1:15
       > a
        [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
       #####使用 rep 生成重复的元素,注意!!!不是repet()
       > b <- rep("gene",times=15) ##rep("gene",15)也可以
       > b
        [1] "gene" "gene" "gene" "gene" "gene" "gene" "gene" "gene" "gene" "gene" "gene"
       [12] "gene" "gene" "gene" "gene"
       ##### paste 拼接两个向量
       > paste(b,a)
        [1] "gene 1"  "gene 2"  "gene 3"  "gene 4"  "gene 5"  "gene 6"  "gene 7"  "gene 8" 
        [9] "gene 9"  "gene 10" "gene 11" "gene 12" "gene 13" "gene 14" "gene 15"
       ###注意1:本来a是数值型,b是字符串,paste自动把数值型向量转换为字符型
       ###注意2:gene和1之间存在空,这是默认用空格连接
       ###注意3:及时查看帮助
       #paste (..., sep = " ", collapse = NULL)#语法,可看到默认分隔符
       #paste0(..., collapse = NULL)#语法,这个没有分隔
       #所以:
       > paste(b,a,sep="")
        [1] "gene1"  "gene2"  "gene3"  "gene4"  "gene5"  "gene6"  "gene7"  "gene8"  "gene9"  "gene10"
       [11] "gene11" "gene12" "gene13" "gene14" "gene15"
       > paste0(b,a)
        [1] "gene1"  "gene2"  "gene3"  "gene4"  "gene5"  "gene6"  "gene7"  "gene8"  "gene9"  "gene10"
       [11] "gene11" "gene12" "gene13" "gene14" "gene15"
       ###再简化
       > paste0("gene",1:5)
       [1] "gene1" "gene2" "gene3" "gene4" "gene5"
       ###再拓展
       > paste0(c("a","b","c"),seq(3),collapse = "") #collapse参数是拼成一个元素
       [1] "a1b2c3" ##注意顺序,采用一般向量间运算规则
       ​
       ########################### 大小写转换 ##############################
       > d <- c("a","b","c")
       > toupper(d)
       [1] "A" "B" "C"
       > tolower(c("PASSWORD"))
       [1] "password"
       ​
       ###################### 取子串 ##################################
       # substr(x, start, stop) 
       > substr("password",1,4)
       [1] "pass"
       > substr(c('JAN07', 'MAR66'), 1, 3)##注意!!!是对每个元素取1到3字符,向量长度不变。与 【】 取子集区分
       [1] "JAN" "MAR"
       > name <- c('AA','BB','CC')
       > name[2:3]
       [1] "BB" "CC" #向量的长度改变
       > substring(c('JAN07', 'MAR66'), 4)##stop不写,默认取到最末
       [1] "07" "66"
       ​
       ########################## 拆分 ################################
       语法strsplit(x, split, fixed = FALSE, perl = FALSE, useBytes = FALSE)
        > y <- '10,8,7,abc,&'
       > strsplit(y, ',', fixed=TRUE)[[1]]
       [1] "10"  "8"   "7"   "abc" "&" ##以“,”分隔,TRUE:完全分割
       ​
       ######################## 替换 ####################
       grep(pattern, x, ignore.case = FALSE, perl = FALSE, value = FALSE,
        fixed = FALSE, useBytes = FALSE, invert = FALSE)
       #替换的模式,操作对象,
       gsub(pattern, replacement, x, ignore.case = FALSE, perl = FALSE,
        fixed = FALSE, useBytes = FALSE)
       > x <- '1, 3; 5'
       > gsub(';', ',', x, fixed=TRUE) #冒号 替换成 逗号,
       [1] "1, 3, 5"
       > grep(3,x) #抓取x中的3
       [1] 1 #返回数量
       > grep(3,x,fixed=TRUE)
       [1] 1</pre>
      

      其他

      > c <- 33.3 ##浮点数
      > typeof(c)
      [1] "double" #浮点型
      > b <- 2
      > b
      [1] 2
      > typeof(b)
      [1] "double"  ##在R语言中数值一般看作double, 如果需要明确表明某些数值是整数, 可以在数值后面附加字母L
      > class(b)
      [1] "numeric"
      > d <- 2L #大写L,换成其他字母不可,小写l也不可。
      > class(d)
      [1] "integer" ## 2L是个整型。
      > typeof(d)
      [1] "integer" ##typeof和class都是返回类型,integer和double都是numeric
      > y <- 1:5
      > typeof(y)
      [1] "integer" #整型
      > y2 <- seq(5)
      > typeof(y2)
      [1] "integer" #整型
      > y3 <- c(1,2,3,4,5) #用c()函数就是浮点型
      > class(y3)
      [1] "numeric"
      > typeof(y3)
      [1] "double"</pre>
      

      贴一个网上的资料:

      https://www.cnblogs.com/csguo/p/7285453.html

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