生信星球培训第八期

学习小组Day5笔记--胡莹

2018-10-27  本文已影响29人  胡莹crystal

很抱歉今天的作业交的很晚,昨天的学习真的是搞得我头大,总是各种出错,找不出原因,最后很晚了才刚刚把内容练习了一遍,仍旧有出错的地方,还有很多命令自己还不理解,觉得自己很笨,又不好意思总是问老师弱智的问题,最后烦躁的关机睡觉了。今天仔细的把每一个函数、命令都搜索了一遍,汇总网上的解释进行学习,这才弄懂了自己出错的原因。一方面是自己不细心,犯少个括号、引号、弄混大小写、忘记更改工作目录等这些低级错误;另一方面自己没有理解函数的含义,也没有提前搜索学习,而是先照着教程运行,这样出错了自己也不明白是为什么。今天仔仔细细重新学了一遍,用押金扣除、小组倒数第一的代价换来了自己对主动搜索学习的重视。
今天的笔记主要还是着重记录自己犯错的地方和觉得重要的知识点,其他的就简要略过。
本节内容重点学习R语言中的两个数据类型---向量数据框 .

向量

关于向量,我觉得思维导图总结的已经很全面,因此把这部分的思维导图附上。

向量
Tips: %in%
判断前面一个向量内的元素是否在后面一个向量中,返回布尔值。

代码实例

m <- c(1,3,13,1443,43,43,4,34,3,4,3)
n <- c(1,13,11,1313,434,1)
m %in% n
[1] TRUE FALSE TRUE FALSE FALSE
[6] FALSE FALSE FALSE FALSE FALSE
[11] FALSE

!m %in% n #取反操作
[1] FALSE TRUE FALSE TRUE TRUE
[6] TRUE TRUE TRUE TRUE TRUE
[11] TRUE

可以使用这个语法提取向量m中的值

m[ m %in% n]
[1] 1 13

m[!m %in% n]
[1] 3 1443 43 43 4 34 3
[8] 4 3

数据框

准备工作

读取本地数据

这里重要的是要弄懂读取命令read.table()函数。

read.table()函数是R最基本函数之一,主要用来读取矩形表格数据。

read.table(file = "huahua.txt",sep = "\t",header =T)

各参数的说明如下:

(1)file
file表示要读取的文件名,一个带分隔符的ASCII文本文件。
file可以是绝对路径或者相对路径,如果file参数中给定的文件名不是绝对路径,则文件名是相对于当前R的工作目录给出的。
Tips:使用file.choose(),弹出对话框,让你选择文件位置。


file使用1
file使用2

该方法免去了记忆和书写文件路径的麻烦,特别是能够避免因数据文件位置移动带来的错误!例如:read.table(file.choose(),...)
(2)sep
分开数据的分隔符。默认sep="",即分隔符为空白。
read.table()函数可以将1个或多个空格、tab制表符("\t")、换行符或回车符作为分隔符。
(3)header
一个逻辑值(TRUE or FALSE)。用于确定数据文件中第一行是不是标题。默认F(FALSE的简写),即认为数据文件没有标题。如果header设置为TRUE,则要求第一行要比数据列的数量少一列。

读取本地数据

设置行名和列名

代码实例:

X<-read.csv('doudou.txt') #在示例数据里有doudou.txt 注意这里的变量X是一个数据框
X
X1 X2
1 A 1
2 B NA
3 C NA
4 D 3
5 E NA
colnames(X)#查看列名
[1] "X1" "X2"
rownames(X)#查看行名,默认行名为行号1,2,3,......
[1] "1" "2" "3" "4" "5"
colnames(X)[1]<-"bioplanet"#有的公司返回数据,左上角第一格为空,R会自动补为x,用这个命令将X修改为bioplanet
X
bioplanet X2
1 A 1
2 B NA
3 C NA
4 D 3
5 E NA
X <- read.csv(file = "huahua.txt",sep = "\t",row.names = 1) #最后row.names的意思是修改第一列为行名
X
X2
A 1
B NA
C NA
D 3
E NA

数据框的导出

write.table(X,file = "yu.txt",sep = ",",quote = F) #分隔符改为逗号,字符串不加双引号(默认格式带由双引号)

命令运行后查看RData文件夹下面,会发现多了一个yu.txt文件。

变量的保存与重新加载

这次没有处理完的数据下次想接着用怎么办?--学会保存和重新加载。保存的格式是RData。---摘自生信星球

save.image(file="bioinfoplanet.RData")#保存当前所有变量

运行完之后查看RData文件夹,会发现多了bioinfoplanet.RData文件。


保存所有变量

save(frame1,file="frame1.RData")#保存其中一个变量

X变量保存

load("frame1.RData")#再次使用RData时的加载命令

加载X变量

提取元素

  • X[x,y]#第x行第y列
  • X[x,]#第x行
  • X[,y]#第y列(横着写,这是不够懒也不够优秀却能存在的写法)
  • X[y] #第y列(竖着写,这是懒惰又优秀的写法)
  • X[a:b]#第a列到第b列
  • X[c(a,b)]#第a列和第b列
  • X$列名#也可以提取列(优秀写法,而且这个命令还优秀到不用写括号的地步,并且支持Tab自动补全哦,不过只能提取一列)

代码实例:

x[1,1]
[1] 1
x[2,]
[1] NA
x[,2]
Error in [.data.frame(x, , 2) : undefined columns selected
x[,1]
[1] 1 NA NA 3 NA
x[1]
X2
A 1
B NA
C NA
D 3
E NA
x[1:2]
Error in [.data.frame(x, 1:2) : undefined columns selected
x[2:1]
Error in [.data.frame(x, 2:1) : undefined columns selected
x[1:1]
X2
A 1
B NA
C NA
D 3
E NA
x[c(0,1)]
X2
A 1
B NA
C NA
D 3
E NA
x$X2
[1] 1 NA NA 3 NA

直接使用数据框中的变量

我们的目标:提取某两列作散点图

c <-data.frame(case=paste("S",c(1:50)),values=runif(50))
plot(case,values)

效果:


缺点:数据框名a在代码中重复出现,不够简洁高效。
-方法2---attach

attach(c)
plot(case,values)
detach(c) #将a删除搜索环境

缺点:当数据框中的列与内存中已有的对象同名时,就会产生冲突报错,因此,attach后必需接detach,将a删除搜索环境。

-方法3---with

with(c,{
+ plot(case,values)
x<<-summary(values) #求和并赋值给x,<<的意思是作为全局变量,y也就是出了with循环仍有效。
})
x #运行完后打印x

代码示例

with(c,{
+ plot(case,values)
x<<-summary(values)
})
Error in +plot(case, values) : invalid argument to unary operator #此处报错,还没搞清楚原因......
x
X1 X2
1 A 1
2 B NA
3 C NA
4 D 3
5 E NA

对比attach
attach当数据框中的列与内存中已有的对象同名时,就会产生冲突报错,因此,attach后必接detach。
用with,则是封闭在数据框的环境中进行运算,不会与外在环境中的对象相冲突,因此,没有以上的隐患。

总结:使用数据框中变量这块我可能还是没有搞懂,需要再研究研究。崩溃...


R-初学数据类型
上一篇 下一篇

猜你喜欢

热点阅读