CB2 101 BioComp 课程总结(R语言)
在R语言部分,老师推荐了这本书An Introduction to Statistical Learning with Applications in R。
还稍微介绍了一点编译相关的内容。
inHybrid | Hybrid | compiled |
---|---|---|
Python | Java | C |
R | Perl | C++ |
Bash |
接下来就是简单的实战,我发现没有编成经验的学生最容易弄错的一段代码是随机数,他们一般都会问,为什么自己的结果同老师演示的结果不同。
x=100
myfunction1<-function(x){
v=rnorm(x)
mean(v)
}
myfunction1(x)
全局变量
(20170410更新,我觉得文章这么长,你们肯定不会看到最后的留言)
在课堂中老师忘了如何将函数中的变量定义为全局变量,其实这个功能我在R中基本就没有用到过。不过我还是查到了方法,用双箭头<<-
来定义全局变量。
谢老大留言:双箭头 «- 表示全局变量这个说法不严谨,但很多人都被误导了。其实它的精确含义是向上层环境中的变量赋值,问题只是如果上层变量中不存在这个变量的话,就继续再向上,如果一直都找不到这个变量,最上层的环境是全局环境 .GlobalEnv,所以有时候就变成了创建全局变量。我自己经常用双箭头魔法向上层环境赋值,比如 knitr 中的 opts_chunk$set()就是基于双箭头的:https://github.com/yihui/knitr/blob/master/R/defaults.R
具体问题参考Define global variable using function argument in R
x=100
myfunction=function(x){
v<<-rnorm(x)
mean(v)
}
myfunction(x)
v
杀掉Rstudio进程
有时由于程序写错了,进入了死循环,并且内存占用越来越大,最简单的处理方式是在终端中杀掉Rstudio进程(虽然不推荐)。
killall rstudio
R的数据结构
- vector
- list
- data.frame (还有一种data.table)
- matrix
- character
课上练习
words=c("Hello","and hi","World")
l=list()
for(i in 1:length(words)){
if(i==3 && (words[i]=="World" || words[i]=="world")){
l[[i]]="America!"
}else{
l[[i]]=words[i]
}
}
for(i in l){
cat(i," ")
}
实用网站和关键函数介绍
正则表达式
没教\w,老师的观念是用\S,\s,\d,\d+来推导一切表达式。
fh=file("/media/sf_CB2/dm/dm.faa",open="r")
while (length (line=readLines(fh,warn=F,n=1))>0){
pattern="^\\>gi\\|(\\d+)\\|ref\\|(\\S+)\\|"
#m=regexec(pattern,line,perl=T)
#m=mymatch(pattern,line)
#if(m[[1]][1]==-1){
# next
#}
#if(!(ifmatched(m))){
# next
#}
m=mymatch(commapattern,line)
if(!ifmatched(m)){
my=mymatch(pattern,line)
}
if(!(ifmatched(m))){
next
}
cat(getstring(line,m,2))
cat("\n")
#v=regmatches(line,m)
#vec=v[[1]]
#cat(vec[2],vec[3],sep="\t")
#cat("\n")
}
close(fh)
pattern="\\|\\s+(.\*)\\s+\\["
commapattern="\\|\\s+(.\*)\\,\\s+\\["
getstring=function(text,match,index){
v=regmatches(text,match)
vec=v[[1]]
return(vex[[index]])
}
mymatch=function(pattern,text){
m=regexec(patter,text,perl=T)
return(m)
}
ifmatched=function(m){
if(m[[1]][1]==-1){
return(FALSE)
}else{
return(TRUE)
}
}
v=rnorm(100)
median(v)
mean(v)
hist(v)
R画图
用最简单的图形命令来画图,在画图之前还穿插了Git的介绍(我会在后续文章中介绍)。
data("airquality")
mean(airquality$Ozone)
mean(airquality$Ozone[is.na(airquality$Ozone)])
d=airquality$Ozone
index=is.na(airquality$Ozone)
clean_idx=!index
clean_value=d[clean_index]
mean(clean_value)
mean(airquality$Ozone,na.rm=T)
summary(airquality)
plot(airquality$Temp,airquality$Ozone, xlab="Temp", ylab="", main="Temp vs Ozone")
plot(airquality$Temp,airquality$Ozone,type="n",xlab="",ylab="",axes=F)
points(airquality$Temp,airquality$Ozone,pch=16)
axis(1)
axis(2)
box()
title(main="Temp vs Ozone",xlab="Temp",ylab="Ozone")
legend("topleft",legend="Some points",pch=16)
par(mfrow=c(1,2))
plot(airquality$Temp,airquality$Ozone, xlab="Temp", ylab="", main="Temp vs Ozone")
plot(airquality$Temp,airquality$Ozone, xlab="Temp", ylab="", main="Temp vs Ozone")