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

R语言中如何访问一个对象中元素的数值

[复制链接]
发表于 2011-1-22 18:22:02 | 显示全部楼层 |阅读模式
下标系统可以用来有效、灵活且有选择性地访问一个对象中的元素;下
标可以是数值型的或逻辑型的。举例来说,要访问向量x中的第3个值,我们
只要输入x[3]就可以获取或改变这个值:
> x <- 1:5
> x[3]
[1] 3
> x[3] <- 20
> x
[1] 1 2 20 4 5
下标本身也可以是一个数值型向量:
> i <- c(1, 3)
> x
[1] 1 20
如果x是一个矩阵或者数据框,第i行第j 列的值可以通过x[i,j]来访问。
要访问一个给定的行或列中所有的值,只要忽略适当的下标(不要忘记逗
号!):
> x <- matrix(1:6, 2, 3)
> x
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> x[, 3] <- 21:22
> x
[,1] [,2] [,3]
[1,] 1 3 21
[2,] 2 4 22
> x[, 3]
[1] 21 22
读者必然注意到了最后一个结果是一个向量而不是一个矩阵。R的缺省规
则是返回一个维数尽可能低的对象。这可以通过修改选项drop的值来改变,
它的缺省值是TRUE:
> x[, 3, drop = FALSE]
[,1]
[1,] 21
[2,] 22
下标系统也普遍适用于数组,使用和数组维数同样多的下标(例如,一
个三维数组:x[i, j, k], x[, , 3], x[, , 3, drop = FALSE],等等)。
记住下标必须使用方括号,而圆括号是用来指定函数的参数的:
> x(1)
Error: couldn't find function "x"
通过使用负数下标也可以用来不显示一个或一些行或列。比如,x[-1,
]将不显示第一行,x[-c(1,15), ]将不显示第1到第15行。使用上面定义的
矩阵:
> x[, -1]
[,1] [,2]
[1,] 3 21
[2,] 4 22
> x[, -(1:2)]
[1] 21 22
> x[, -(1:2), drop = FALSE]
[,1]
[1,] 21
[2,] 22
对于向量,矩阵和数组,可以用一个比较运算表达式作为下标来访问元
素的值:
> x <- 1:10
> x[x >= 5] <- 20
> x
[1] 1 2 3 4 20 20 20 20 20 20
> x[x == 1] <- 25
> x
[1] 25 2 3 4 20 20 20 20 20 20
下面是使用逻辑型下标的一种应用(选择一个整数变量中的偶数):
> x <- rpois(40, lambda=5)
> x
[1] 5 9 4 7 7 6 4 5 11 3 5 7 1 5 3 9 2 2 5 2
[21] 4 6 6 5 4 5 3 4 3 3 3 7 7 3 8 1 4 2 1 4
> x[x %% 2 == 0]
[1] 4 6 4 2 2 2 4 6 6 4 4 8 4 2 4
在上面的例子中,下标系统使用了比较运算符返回的逻辑值。这些逻辑
值可以被预先计算,如果需要,将循环使用:
> x <- 1:40
> s <- c(FALSE, TRUE)
> x
[1] 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40
逻辑下标也可以在数据框中使用,但是要注意数据框中不同的列可能有
不同的数据类型。
对于列表,访问不同的元素(可以是任何类型的对象)可以通过单一的
或者双重的方括号来实现;它们的区别是:单个括号返回一个列表,而双
重括号将提取列表中的对象。在得到的结果中也可以使用下标,就像之前在
向量、矩阵等情况中看到的那样。例如,一个列表中的第3个对象是一个向
量,它的取值可以使用my.list[[3]]来访问,如果是一个三维数组则使
用my.list[[3]][i, j, k]等等;另一个区别是my.list[1:2]将返回一个列
表,包含原始列表的第1个和第2个元素,而my.list[[1:2]]不会给出期望的
结果。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 02:19 , Processed in 0.026852 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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