超感谢花花教的新建project的方法!其实我之前自己在学的时候就很郁闷,已经学了好几个章节但是一直在同一个project里面,感觉history一点一点地加上去隐隐约约感到不安(以前学C++的时候都是做一个题新建一个project嘛),现在终于学到让我安心的方法啦!
新建R project&working directory
然后
ctrl+l
整个console里码过的代码就都没啦开始今天的学习惹
向量
向量的赋值
> x<-c(1,2,3)
> y<-(1:10)
> z<-seq(1,10,by=0.5)
> x<-rep(1:3,times=2)
> View(z)
手动让它显示变量z的具体内容了,可是点击变量名并没有起到相同的效果提取向量中的元素
按元素位置提取
根据元素值的大小
> z[z==5]
[1] 5
> z
[1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 9.0 9.5 10.0
> z[z==5]
[1] 5
> z[x<5]
[1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 9.0 9.5 10.0
> z[z<5]
[1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5
> z[z %in% c(1,2,5)]
[1] 1 2 5
这里注意![]内的变量名称一定要与向量名称一致!
我一开始打z[x==5]
就一直返回numeric(0)
但是神奇的是!z[x<5]
居然返回的不是空向量,这是啥原理啊?
%in%这个运算符看起来很复杂,但是我总结了下你就当%%是个括号,只看两个%中间的东西的意义就行了(包括pipe中会用到的%>%都是一样的!)
数据框
读取数据框
read.csv
> X<-read.csv(doudou.txt)
Error in read.table(file = file, header = header, sep = sep, quote = quote, :
object 'doudou.txt' not found
> read.csv('doudou.txt')
X1 X2
1 A 1
2 B NA
3 C NA
4 D 3
5 E NA
!所以一定要记得单引号!read.csv('x.txt')
> read.csv("doudou.txt")
X1 X2
1 A 1
2 B NA
3 C NA
4 D 3
5 E NA
试了下双引号也可以嘿嘿,我更习惯双引号呢
read.table
> read.table(file="huahua.txt",sep="\t",header=T)
X1 X2
1 A 1
2 B NA
3 C NA
4 D 3
5 E NA
> (table<-read.table(file="huahua.txt",sep="\t",header=T))
X1 X2
1 A 1
2 B NA
3 C NA
4 D 3
5 E NA
读取文件,分隔符为Tab,有表头
用<-将读取的数据狂赋值给一个变量table
两边再加括号可以同时显示table的内容
行名和列名
查看行名与列名
> X<-read.csv('doudou.txt')
> View(X)
> colnames(X)
[1] "X1" "X2"
> rownames(X)
[1] "1" "2" "3" "4" "5"
注意R语言里区分大小写!View()打成view()就不行!
x和X是两个变量!
修改行名与列名
> colnames(X)[1]<-"bioplanet"
> #set the colname of first column as "bioplanet"
> X<-read.csv(file="huahua.txt",sep="\t",row.names=1)
> View(X)
我先看一下huahua.txt在txt格式下长啥样
看看
row.names=1
带来的变化鼠标移到上面去看看
第一列变成了column0,因为这时它已经被设置成了行名,我的理解是它已经不属于变量"有意义"的一部分了,它不再是数据而是行名
数据框的导出
> write.table(X,file="yee.txt",sep=",",quote=F)#导出X为yee.txt,分隔符为逗号,字符串不加引号
让我们来看看导出效果
变量的保存和重新加载
保存
> save.image(file="bioinfoplanet.RData")
> save(table,file="table.RData")
重新加载
> load("table.RData")
> table
X1 X2
1 A 1
2 B NA
3 C NA
4 D 3
5 E NA
提取元素
> table
X1 X2
1 A 1
2 B NA
3 C NA
4 D 3
5 E NA
> table[3,2]
[1] NA
> table[2,]
X1 X2
2 B NA
> table[,2]
[1] 1 NA NA 3 NA
> table[2]
X2
1 1
2 NA
3 NA
4 3
5 NA
> table[1,2]
[1] 1
> table[1:2]
X1 X2
1 A 1
2 B NA
3 C NA
4 D 3
5 E NA
> table[c(1,2)]
X1 X2
1 A 1
2 B NA
3 C NA
4 D 3
5 E NA
> table$X1
[1] A B C D E
Levels: A B C D E#还显示变量水平这么优秀的吗
直接使用数据框中的变量
先新建一个数据框
> c<-data.frame(case=paste("S",c(1:50)),values=runif(50))
> View(c)
并看看它长啥样
paste("S",c(1,50)) =c(S 1,S 2,...,S 50)
用这个数据框的数据作图吧
最复杂但是最不容易出错的方法
> plot(c$case,c$values)
attach(千万记得detach哦)
> attach(c)
> plot(case,values)
> detach(c)
不适用于两个以上数据框的列名有冲突时
用完及时detach,不然它会一直留在搜索环境,指不定给你带来什么困扰哦
with
> with(c,{
+ plot(case,values)
+ x<<-summary(values)
+ })
> x
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.05364 0.31408 0.56415 0.53437 0.78704 0.98848
我很不喜欢这个方法诶,,在RSdutio自动补齐括号的情况下想要分行就很烦
我用tidyverse包来皮一下
>library(tidyverse)
> c%>%
+ ggplot()+geom_point(mapping=aes(x=case,y=values))