前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言学习day2

R语言学习day2

原创
作者头像
VOHOKO
修改2024-03-06 14:59:50
2560
修改2024-03-06 14:59:50

课后思考:

paste0和paste有什么区别和联系?

代码语言:r
复制
> x = c(1,3,5,1)

> y = c(3,2,5,6)
> #paste与paste0的区别
> paste(x,y)
[1] "1 3" "3 2" "5 5" "1 6"

> paste0(x,y)
[1] "13" "32" "55" "16"

> paste(x,y,sep = "")

[1] "13" "32" "55" "16"

paste里的数据之间默认是空格连接,也可以特别指定为其他符号,用sep = “”

paste0里的数据之间无任何连接符号

上次作业

代码语言:r
复制
 # 1.生成1到15之间所有偶数
 
> seq(from=2,to = 15, by = 2)
 [1]  2  4  6  8 10 12 14
 
 > # 2.生成向量,内容为:"student2"  "student4"  "student6"  "student8"  "student10" "student12"

 > # "student14" 

 > # 提示:paste0

 
 > paste0(rep("student", times=7), seq(from=2,to=15,by=2))

 [1] "student2"  "student4"  "student6"  "student8"  "student10" "student12" "student14"
> 
 
 ##为什么times 是7??


 > a = seq(from=2,to = 15, by = 2)

 > length(a)
[1] 7

 > paste0(rep("student", times=length(a)), a)

 [1] "student2"  "student4"  "student6"  "student8"  "student10" "student12" "student14"

 ##如果times是5
,会发生循环补齐
 
> paste0(rep("student", times=5), seq(from=2,to=15,by=2))

 [1] "student2"  "student4"  "student6"  "student8"  "student10" "student12" "student14"
 
 > # 3.将两种不同类型的数据用c()组合在一起,看输出结果
 
> c(seq(from=2,to = 15, by = 2), paste0(rep("student", times=7), seq(from=2,to=14,by=2)))
 
 [1] "2"         "4"         "6"         "8"         "10"        "12"        "14"        "student2"  "student4"  "student6" 
 
[11] "student8"  "student10" "student12" "student14"

向量的生成

  1. 用c()逐一放在一起
  2. 连续的数字可以用冒号:
  3. 重复rep(),规律的seq(),随机的rnom()
  4. paste() / paste() 组合元素(seq只存在于paste和paste0中)

对单一向量的操作

1. 赋值

  • 赋值语句是没有什么输出结果的,结果是空白,除非再打一遍x,就会出现
  • 如果希望赋值和输出一起实现

用()括起来

代码语言:r
复制
(x <- c(1,3,5,1))

或者; 可以允许两行或多个代码在一行里

代码语言:r
复制
x <- c(1,3,5,1);x

2. 数学运算

代码语言:r
复制
> x+1
[1] 2 4 6 2
> log(x)
[1] 0.000000 1.098612 1.609438 0.000000
> sqrt(x)
[1] 1.000000 1.732051 2.236068 1.000000> 

3. 比较运算,生成逻辑值向量,就是T,F,NA

代码语言:r
复制
> #(3)根据某条件进行判断,生成逻辑型向量

> x>3

[1] FALSE FALSE  TRUE FALSE


> x==3
[1] FALSE  TRUE FALSE FALSE

4. 初级统计

代码语言:erlang
复制
max(x) #最大值
min(x) #最小值
mean(x) #均值
median(x) #中位数
var(x) #方差
sd(x) #标准差
sum(x) #总和
length(x) #长度
unique(x) #去重复,从左往右开始,读取第一次出现的元素)
duplicated(x) #对应元素是否重复
k=duplicated(x);!ktable(x) #重复值统计

> table(x) #重复值统计
x
1 3 5 
 2 1 1 ##这里是元素出现的重复的次数统计
 
sort(x)
sort(x,decreasing = F)
sort(x,decreasing = T)

 x <- c(1,3,5,1);x
 [1] 1 3 5 1
 > sort(x)
 #对向量进行排序
 [1] 1 1 3 5
 > sort(x,decreasing = F) #按照递增的方式排列
 
[1] 1 1 3 5
 > sort(x,decreasing = T)
 #按照递减的方式排列
 [1] 5 3 1 1

对两个向量进行操作

等位计算

1. 数学计算

代码语言:javascript
复制
> x + y
[1]  4  5 10  7

2. 比较运算,生成等长的逻辑向量

代码语言:r
复制
x = c(1,3,5,1)
y = c(3,2,5,6)

> x == y 
[1] FALSE FALSE  TRUE FALSE

> y == x
[1] FALSE FALSE  TRUE FALSE

3. 连接

代码语言:r
复制
> paste(x,y,sep=",")
[1] "1,3" "3,2" "5,5" "1,6"

4. 循环补齐

发生条件:等位计算方法+向量的长度不相等

代码语言:r
复制
> a = c(3,2,5)
> b= c(2,1,5,6,2,2,3,4,5)
> a == b[1] FALSE FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE

5. 交集、并集、差集

代码语言:r
复制
> intersect(x,y) #交集
[1] 3 5

> union(x,y) #并集,自动去重复
[1] 1 3 5 2 6

> setdiff(x,y)#差集 在x有,在y里没有
[1] 1

> setdiff(y,x)#差集 在y有,在x里没有
[1] 2 6

> x %in% y #x的每个元素在y中存在吗,x的第一个元素和所有的y对应,有没有,依次类推

[1] FALSE  TRUE  TRUE FALSE

> y %in% x #y的每个元素在x中存在吗
[1]  TRUE FALSE  TRUE FALSE

注意!

x == y 和 x %in% y 是不一样的

x == y 里 将元素 一一对应

x %in% y 将x向量的元素逐个的和y向量的所有元素对应


向量的筛选----取子集,使用中括号[ ]

筛选方法:将TURE对应的值挑选出来,FALSE的丢弃([]内外的长度一定是相等的)

1. 按照逻辑值取子集,[]里代表的一个逻辑,会生成一系列逻辑值,根据逻辑值对应的元素取子集向量

代码语言:r
复制
> x <- 8:12
> x[x == 10]  ##在x向量里取 x == 10的子集
[1] 10

> x[x < 12]  ##在x向量里取 x < 12的子集
[1]  8  9 10 11

> x %in% c(9,13)  # 在x向量里,每一个元素是否和c向量里有对应的逻辑值
[1] FALSE  TRUE FALSE FALSE FALSE

> x[x %in% c(9,13)] #在x向量里,根据每一个元素是否和c向量里有对应的逻辑值,并取子集
[1] 9

2. 根据位置取子集, []里的代表位置,根据位置判断逻辑值,再根据逻辑值,取子集向量

代码语言:r
复制
> x <- 8:12
> x[4] #单独位置可以直接写
[1] 11

> x[2:4]  #连续位置可以直接用冒号连接
[1]  9 10 11

> x[c(1,5)] #取两个不连续的位置的时候,要写成向量的集合,他是两个位置组成的向量
[1]  8 12

> x[-4] #- 是反选
[1]  8  9 10 12

> x[-(2:4)]
[1]  8 12

修改向量中的某个/某些元素:取子集+赋值

代码语言:r
复制
> x
[1]  8  9 10 11 12

> x[4] = 40 #改一个元素
> x
[1]  8  9 10 40 12 

> x[c(1,5)] = c(80,20) #改多个元素
> x
[1] 80  9 10 40 20

简单向量作图

代码语言:r
复制
> k1 = rnorm(12);k1 #分号后面的k1,代表输出k1,写在了一行里
[1] -0.62274262  0.02643917  0.92799118  0.12295920  0.75581773  0.32504948 -0.51534683 -0.49656849 [9] -0.80158737 -0.21499040 -1.20585899 -0.38819129

> k2 = rep(c("a","b","c","d"),each = 3);k2 
[1] "a" "a" "a" "b" "b" "b" "c" "c" "c" "d" "d" "d"
> plot(k1) #结果是一张图1,纵坐标是k1,k1的下标默认为横坐标
> boxplot(k1~k2) #结果是一张图2,k1 是纵坐标,k2是横坐标
图1
图1
图2
图2

一些杂七杂八的小记录:

向量里是元素,长度就是元素的个数

paste0(rep("x",3),1:3)可省略times,

seq的里面from to也可以省略

unexpected 代表出现代码错误的关键词

?加一个函数, 可以查询help

each和times 的区别:

代码语言:r
复制
> rep(c("a","b","c","d"),each = 3) #每个元素重复三次
[1] "a" "a" "a" "b" "b" "b" "c" "c" "c" "d" "d" "d"

> rep(c("a","b","c","d"),3)#times 省略了,结果是循环的样子,循环向量三次
[1] "a" "b" "c" "d" "a" "b" "c" "d" "a" "b" "c" "d"

> rep(c("a","b"),times = c(4,3)) # 第一个元素循环4次,第二个元素循环3次
[1] "a" "a" "a" "a" "b" "b" "b"

下面两个代码哪一个是对的,第一个是对的

代码语言:r
复制
tep = sort(log_rank_p[log_rank_p<0.05])
#log_rank_p是一个数据,在[ ]前面一定是数据
#先运行log_rank_p[log_rank_p<0.05],再运行sort

tep = sort(log_rank_p)[log_rank_p<0.05]
##先运行sort(log_rank_p),中括号里面和外面的要求是长度相等,但是这里无法一一对应
##可修改为tep = sort(log_rank_p)[sort(log_rank_p<0.05)] #中括号内外要一一对应

课上的颜色的球的例子

代码语言:fortran
复制
#blue = "b",yellow = "y",green = "g"
> x = rep(c("b","g","y"), times = c(3,4,6));x 
[1] "b" "b" "b" "g" "g" "g" "g" "y" "y" "y" "y" "y" "y"
> y = c("b","g");y
[1] "b" "g"

> x %in% y
 
[1]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE
[13] FALSE
> x[x %in% y]
[1] "b" "b" "b" "g" "g" "g" "g"

以上课程笔记

生信技能树-生信入门马拉松

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 向量的生成
  • 对单一向量的操作
    • 1. 赋值
      • 用()括起来
        • 或者; 可以允许两行或多个代码在一行里
          • 2. 数学运算
            • 3. 比较运算,生成逻辑值向量,就是T,F,NA
              • 4. 初级统计
              • 对两个向量进行操作
                • 等位计算
                  • 1. 数学计算
                    • 2. 比较运算,生成等长的逻辑向量
                      • 3. 连接
                        • 4. 循环补齐
                          • 5. 交集、并集、差集
                            • 注意!
                            • x == y 和 x %in% y 是不一样的
                            • x == y 里 将元素 一一对应
                            • x %in% y 将x向量的元素逐个的和y向量的所有元素对应
                        • 向量的筛选----取子集,使用中括号[ ]
                        • 修改向量中的某个/某些元素:取子集+赋值
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档