注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

wangyufeng的博客

祝愿BB 健康开心快乐每一天

 
 
 

日志

 
 

R语言及bioconductor书 学习笔记(转)  

2010-11-05 13:05:40|  分类: R、SVG&GNUPlot画 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

//vigenettes文档
1. 安装相关包
tkWidgets包
依赖的包有:widgetTools,DynDoc
2. 使用
>library(tkWidgets)   //加载包
>vExplorer()   //打开浏览器
选择一个包,则会列出包相关的.Rnw文件, 点击一个文件,则会按步执行文件中的代码块.

帮助: > ? segment 查看segment函数的帮助.

*************************************
调试
*************************************
larger<-function(x,y){
cat('x=',x,'\n')   #将需要的调试信息输出
y.is.bigger<-(y>x)
browser()   ##程序暂停此处,可查看变量或表达式的值,还可修改变量的值
x;
}
在browser() 状态下,用n命令进行单步执行状态,用n或回车执行下一步,用c退出
debug(f)可以打开对f函数的调试,执行到f函数时自动进入单步执行的browser() 菜单
用undebug(f)函数关闭调试。

larger<-function(x,y){
cat('x=',x,'\n')   #将需要的调试信息输出
y.is.bigger<-(y>x)
x;
}
debug(larger)
larger(1,3)
执行以上语句后进入browser() 状态。
undebug(larger)
此时,再次执行larger(1,3)则正常执行。


-------------------------------------
//列表
-------------------------------------
//构造List
list(name1=obj1,...namen=objn)
注意obj是按值拷贝的,即此时对obj操作不影响原来的obj
如果不用namex命名,则直接通过下标访问元素

//合并多个列表
c(list1,list2)
则产生一个新的列表,包含list1..2的所有元素,而不是包含list1和list2这两个list

//长度扩展
直接对列表进行长度扩展
假设family是有4个元素的list,要增加一个元素,只需:
family<-list("joe",wife="me",age=c(1,3,5))
family[5]<-list(addr=c("hello"))   //直接扩展新元素
> family
[[1]]
[1] "joe"
$wife
[1] "me"
$age
[1] 1 3 5
[[4]]
NULL
[[5]]   //奇怪,这个为什么没有名字addr?
[1] "hello"
> class(family[[5]])
[1] "character"

family2<-list(birth="20070720")
c(family,family2)->family
>family
[[1]]
[1] "joe"
$wife
[1] "me"
$age
[1] 1 3 5
[[4]]
NULL
[[5]]
[1] "hello"
$birth   //合并列表后新增的元素,这个就会有name属性?
[1] "20070720"


-------------------------------------
//向量
-------------------------------------
扩充向量:向量不用定义长度
c(1:3,NA)->nd
nd[8]<-8
> nd
[1]   1   2   3 NA NA NA NA   8

is.na(nd)
nd==NA
> is.na(nd)
[1] FALSE FALSE FALSE   TRUE   TRUE   TRUE   TRUE FALSE

> nd==NA   //很不解,那如何判断所有元素都是NA或者有NA?
[1] NA NA NA NA NA NA NA NA
> t=c(1:3)
> t==NA
[1] NA NA NA

//获得向量子集
//将非NA的数取出
nd<-c(1:3,NA,NA,NA,8)
> nd
[1]   1   2   3 NA NA NA   8
nd[!is.na(nd)]->validNd
validNd
[1] 1 2 3 8

//将非NA数取出,并且子集的数据大于2
nd[!is.na(nd) & nd>2]->validNd
validNd
[1] 3 8

//将NA数字设置为0
nd<-c(1:3,NA,NA,NA,8)
nd[is.na(nd)]<-0
nd
[1] 1 2 3 0 0 0 8

//负整数子集(不包含指定元素)
bd<-c(6:10)
bd
[1]   6   7   8   9 10
bd[-c(3:1,1:3)]->d
d
[1]   9 10
> bd[-c(3:1)]
[1]   9 10

//名字-下标
fruit<-c(5,10,2,20)
names(fruit)<-c("orange","ban","app","pea");
lunch<-fruit[c("app","ban")];
lunch
app ban
   2   10
  
//R中的对象
单纯的(atomic),如向量有字符向量,逻辑向量,整形向量等。一个空的字符向量可显示为character(0)
复合的(recursive): list,data.frame,分组因子..
通过 is.atomic(x) 判断x是否为数值向量

> attributes(fruit) //查看对象的其它属性
$names
[1] "orange" "ban"     "app"     "pea"     
> attributes(nd)
NULL

//改变对象的长度
空对象
character()->name
name
#character(0)

R中可通过给相应长度元素赋值而方便地改变对象长度,这种规则适用于所有结构!
所增加的元素的类型由第一个元素的对象模式决定
name[5]<-"joe"   //直接赋值
name  
[1] NA     NA     NA     NA     "joe"
length(name)<-7   //通过length改变长度
name
[1] NA     NA     NA     NA     "joe" NA     NA   

减少对象长度可使用向量子集方法
name[c(2,4,5)]->name
name
[1] NA     NA     "joe"


//对象属性
fruit<-c(5,10,2,20)
names(fruit)<-c("orange","ban","app","pea");
fruit<-c(5,10,2,20)
names(fruit)<-c("orange","ban","app","pea");
attributes(fruit)
#$names
#[1] "orange" "ban"     "app"     "pea"
attr(fruit,"dim")<-c(2,2)
fruit
      [,1] [,2]   //设置dim后是按列一列一列存放直到最后的,若元素个数不对则无法进行dim操作
[1,]     5     2
[2,]    10    20
attributes(fruit)
$names
[1] "orange" "ban"     "app"     "pea"   
$dim
[1] 2 2


-------------------------------------
//数组
-------------------------------------
矩阵和向量是数组的特殊形式,一维数组是向量,二维数组是矩阵

arr<-array(0,c(2,3))   //产生一个初值为0数组
arr
      [,1] [,2] [,3]
[1,]     0     0     0
[2,]     0     0     0
> class(arr)
[1] "matrix"
> typeof(arr)
[1] "double"
> arr<-array(NA,c(2,3))   //产生一个初值为NA数组
> arr
      [,1] [,2] [,3]
[1,]    NA    NA    NA
[2,]    NA    NA    NA
> class(arr)    //类
[1] "matrix"
> typeof(arr)   //对象类型
[1] "logical"   
  
data<-c(1:12)   //由已有数据构造数组
arr<-array(data,dim=c(2,3))    //或 array(data,c(2,3))
arr
      [,1] [,2] [,3]
[1,]     1     3     5
[2,]     2     4     6  
>    class(arr)
[1] "matrix"

//各维名称 dimnames指定各维的名称
//也可以先定义数组,再用dimnames(x)对其赋值,对于矩阵还有rownames和colnames来访问行名和列名
prices<-array(c(20,24,22,34,434,34),c(2,3),dimnames=list(c("v1","v2"),c("64M","128M","256M")))
prices
    64M 128M 256M
v1   20    22   434
v2   24    34    34
prices[,c("64M","256M")]   //用名称访问
64M 256M
v1   20   434
v2   24    34

//数组矩阵合并
cbind()将参数变量横向合并成大矩阵,rbind()纵向,其结果总是二维的(矩阵),可用其将向量合并为矩阵
x1<-rbind(c(1,2),c(3,4))
x1
      [,1] [,2]
[1,]     1     2
[2,]     3     4

x2<-cbind(c(1,2),c(3,4))
x2
      [,1] [,2]
[1,]     1     3
[2,]     2     4

//向量扩充c()
由数组得到向量最简单的办法
c(...) 还可以连接多个
而对于矩阵a,b,则c(a,b)将a和b按列拉伸后再整合成一个向量

//数组操作
对于向量使用sum,mean进行计算,而对于数组若需要对其中一维或几维进行操作,则用apply
apply(X,margin,fun)   margin为fun要应用到的维 1-行,2-列
相当于固定margin指定的那一维,将其它维的值取出作为子数组或向量送入FUN进行运算。

如a为矩阵,则apply(a,1,sum)表示对a的各行求和,返回与第一维长度相同的向量
apply(a,2,sum) 是对各列求和

a<-cbind(c(4,9,1),c(3,4,2))
a
apply(a,2,sort)
      [,1] [,2]
[1,]     1     2
[2,]     4     3
[3,]     9     4
> apply(a,2,sum)
[1] 14   9

-------------------------------------
//控制台
-------------------------------------
cat("TITLE extra line","3 4 5 5","33 55 6",file="ex.data",sep="\n")
   sep="\n"将各项单独一行
cat(c("A,B,C"),c("E",'F'),"\n",sep=",")
A,B,C,E,F,

-------------------------------------
//循环
-------------------------------------
for (n in c(2,5,10,20,50)){
   x<-rnorm(n)   //这个是得到n个随机数
   cat(n,":",sum(x^2),"\n")
}  
2 : 1.879354
5 : 6.210741
10 : 7.937837
20 : 21.25640
50 : 30.00602  

转自:http://hi.baidu.com/xhuister/blog/item/33a5e951546a161a377abe51.html

  评论这张
 
阅读(1345)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017