很抱歉今天的作业交的很晚,昨天的学习真的是搞得我头大,总是各种出错,找不出原因,最后很晚了才刚刚把内容练习了一遍,仍旧有出错的地方,还有很多命令自己还不理解,觉得自己很笨,又不好意思总是问老师弱智的问题,最后烦躁的关机睡觉了。今天仔细的把每一个函数、命令都搜索了一遍,汇总网上的解释进行学习,这才弄懂了自己出错的原因。一方面是自己不细心,犯少个括号、引号、弄混大小写、忘记更改工作目录等这些低级错误;另一方面自己没有理解函数的含义,也没有提前搜索学习,而是先照着教程运行,这样出错了自己也不明白是为什么。今天仔仔细细重新学了一遍,用押金扣除、小组倒数第一的代价换来了自己对主动搜索学习的重视。
今天的笔记主要还是着重记录自己犯错的地方和觉得重要的知识点,其他的就简要略过。
本节内容重点学习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
数据框
准备工作
- 将教程提供的实例数据放在RData文件夹下。
我居然忘记了自己在安装R的时候建过一个RData文件夹,以至于在这一步瞎折腾了好久,大概昨晚真的是脑子进水了吧... - 查看一下自己的工作路径是否正确。
我的工作路径是电脑默认的,并不是RData路径,刚开始不知道,报错找不出原因,特别感谢同组的天天同学提醒了我。
读取本地数据
这里重要的是要弄懂读取命令read.table()函数。
- read.table函数详解
read.table()函数是R最基本函数之一,主要用来读取矩形表格数据。
read.table(file = "huahua.txt",sep = "\t",header =T)
各参数的说明如下:
(1)file
file表示要读取的文件名,一个带分隔符的ASCII文本文件。
file可以是绝对路径或者相对路径,如果file参数中给定的文件名不是绝对路径,则文件名是相对于当前R的工作目录给出的。
Tips:使用file.choose(),弹出对话框,让你选择文件位置。
该方法免去了记忆和书写文件路径的麻烦,特别是能够避免因数据文件位置移动带来的错误!例如:read.table(file.choose(),...)
(2)sep
分开数据的分隔符。默认sep="",即分隔符为空白。
read.table()函数可以将1个或多个空格、tab制表符("\t")、换行符或回车符作为分隔符。
(3)header
一个逻辑值(TRUE or FALSE)。用于确定数据文件中第一行是不是标题。默认F(FALSE的简写),即认为数据文件没有标题。如果header设置为TRUE,则要求第一行要比数据列的数量少一列。
设置行名和列名
-
read.csv
读取csv格式的数据文件,是read.table函数的包装,同样接受read.table所有参数。
和read.table有所不同的,是read.csv的默认参数有别。
header---参数默认为TRUE
sep---默认是逗号 -
colnames
colnames主要是对矩阵或数据框进行列命名
代码实例:
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文件。
-
write.table函数
R语言中用于导出数据的函数
语法:
write.table (x, file ="", sep ="", row.names =TRUE, col.names =TRUE, quote =TRUE)
参数说明:
x:需要导出的数据
file:导出的文件路径
row.names:是否导出行序号,默认为TRUE,也就是导出行序号
col.names:是否导出列名,默认为TRUE,也就是导出列名
sep:分隔符,默认为空格(” “)
quote:字符串是否使用引号表示,默认为TRUE,也就是使用引号表示
变量的保存与重新加载
这次没有处理完的数据下次想接着用怎么办?--学会保存和重新加载。保存的格式是RData。---摘自生信星球
save.image(file="bioinfoplanet.RData")#保存当前所有变量
运行完之后查看RData文件夹,会发现多了bioinfoplanet.RData文件。
save(frame1,file="frame1.RData")#保存其中一个变量
load("frame1.RData")#再次使用RData时的加载命令
提取元素
- 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
直接使用数据框中的变量
我们的目标:提取某两列作散点图
- 方法1
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,则是封闭在数据框的环境中进行运算,不会与外在环境中的对象相冲突,因此,没有以上的隐患。
总结:使用数据框中变量这块我可能还是没有搞懂,需要再研究研究。崩溃...