找回密码
 注册
查看: 8935|回复: 0

R语言使用的一些注意事项

[复制链接]
发表于 2012-6-23 22:13:00 | 显示全部楼层 |阅读模式
不用等号用<-赋值,尽管也可以用=,但不建议这么做
获得帮助的三种途径
1) help ? 获得方法的文档解释
2) example 获得方法的样例
3) help.search ?? 模糊搜索,搜寻自己想要的功能,R会返回相关结果
尽管变量的数据类型无需在使用前声明,但在没有声明变量的存储方式之前,直接通过下标的方式对其赋值是会有错误的。比如x[1]<-1,如果x前面没有出现过,也没有显式声明(如vector(length=2)),则会报错。
vector会循环。例如,c(1,2,4) + c(2,3,4,5,6) 其中长度略短的c(1,2,4)会“循环”匹配较长的vector长度,被当做c(1,2,4,1,2)来做该加法,因此结果为3 5 8 6 8。
vector的过滤。
1) 对于x<-c(1,2,3),通过x[-2]可以返回一个新的vector,结果为剔除了位置2数据的x。这实际上就是过滤。而R语言在[]中能做得更多,可以直接写判断表达式,如x[x>=2]返回包涵2、3的vector。
2) 利用subset方法也可以实现过滤,如subset(x,x>5),但与x[x>5]的区别是,subset会剔除NA,而后者则保留。
用args()方法来查看一个函数的参数
x<-1:2与y<-c(1,2)的数据类型(typeof)是不同的,利用冒号创建的是整型,而c方法创建的是浮点型。
创建matrix的方式
1) y<-matrix(c(1,2,3,4),nrow=2,ncol=2)
2) y<-matrix(nrow=2,ncol=2); y[1,1]<-1….
3) m<-matrix(c(1,2,3,4,5,6),nrow=2,byrow=T) 通过byrow参数来“行优先”输入
取子矩阵的几种方式
1) 连续取 z[,2:3]:取z矩阵2、3两列
2) 跳跃取 z[c(1,3),]:取z矩阵1、3两行
3) 剔除取 z[-2,]:剔除z矩阵第2行
apply()方法可以把自定义的function,应用到matrix中的元素上。如果自定义function返回k个元素的vector,那么apply()的结果将包含k行。
通过cbind()和rbind()合并两个vector(matrix)——实际上,所谓“合并”,只是创建了一个新的matrix
从matrix中提取一行或列,被提取的部分会自动成为vector,而不再是matrix。在进行提取的时候,需要指定drop参数为FALSE来保证最终还是matrix。如r<-z[2,, drop=FALSE]。抑或利用as.matrix()方法将被提取的结果改变为matrix
array为matrix提供了额外的维度,使得matrix由二元变为三元。如test<-array(data=c(firstMatrix,secondMatrix),dim=c(rownumber,columnnumber,2))。dim参数决定了合并的matrix数量。而array的合并可以实现更高维度的matrix。
list的创建方式
1) 带tag的方式:j<-list(name=”Joe”,salary=55000,union=T)
2) 无tag的方式:j<-list(“Joe”,55000,T)
3) vector的mode参数:z<-vector(mode=”list”),之后可以向z赋值
list中元素的访问:
1) list_name$tag_name
2) list_name[[tag_name]]
3) list_name[[index]]
list中元素的访问需要双层[[]],如果单层[index]或[tag_name]会访问到tag_name(或者index)与值本身,是个子list,而不仅仅是值;而且,双层[[]]中的只能是单一的tag_name或index,不能是类似[[1:3]]这样访问,而单层可以[1:3],提取出1~3作为子list
不像vector在创建之后就无法增加、删除元素,list中的元素是可以动态增减的
list中可以嵌套list
data frame的创建:
kids<-c(“Jack”,”Jill”)

ages<-c(12,10)

d<-data.frame(kids,ages,stringsAsFactors=FALSE)

data frame中元素的创建
1) d[[index]]

2) d$column_name

3) d[,index]:访问第index列

4) d[index,]:访问第index行

5) d[[a:b]]:访问第a列的第b个元素

6) d[a:b]:对data frame提取a列到b列来构成子frame。

factor可以根据vector构建而出,比如
x<-c(5,12,13,12)
xf<-factor(x)
当然也可以是字符类型的vector来构建factor
factor中有个level的概念,level代表的是分组的结果。通过levels()方法可以列出factor的所有level
tapply(x,f,g):vector x按照factor f分组,对每个组运算g方法。其中x与f的长度需要一致。对x的分组f计算,可以不只是一个分组方式,比如对收入x算平均值(g = mean),可以根据年龄段f1来算,也可以根据性别f2来算,于是tapply(x,list(f1,f2),mean)。by()与tapply()类似,但其第一个参数可以是matrix或者data frame。
用split(x,f)方法可以对x进行分组,即taplly的第一步。tapply的第一个参数必须是vector,而split还可接受data frame。
<-可用于赋值,但不能用在参数列表中,参数中要用=
sort()与order()二者都可以用来做排序,前者直接返回数据集,后者返回index,而被排序的数据集不会被改变,如
> x
[1] 13  5  2 15  7
> sort(x)
[1]  2  5  7 13 15
> order(x)
[1] 3 2 5 1 4
> x
[1] 13  5  2 15  7
> y<-x[order(x)]
> y
[1]  2  5  7 13 15
rank()方法可以为vector中的元素排名,如
> rank(c(3,7,2,6,3,9))
[1] 2.5 5.0 1.0 4.0 2.5 6.0
union(x,y):求x与y的并集
intersect(x,y):交集
setdiff(x,y):补集(包含于x而不包含于y的元素将被返回)
setequal(x,y):测试集合是否相等
c %in% y:测试c是否属于y集合
choose(n,k):长度为n的集合中,长度为k的子集个数
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|小黑屋|生物统计家园 网站价格

GMT+8, 2024-11-22 20:06 , Processed in 0.026989 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表