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

怎么样使用数组中的元素

[复制链接]
发表于 2011-1-22 21:07:06 | 显示全部楼层 |阅读模式
数组索引以及数组分割
数组元素可以通过给定数组名及其后方括号中用逗号隔开的下标访问。
更为一般的是,数组分割可以通过在下标位置给定一系列索引向量实现;需要注
意的是,如果某个位置上给定的索引向量为空,则该下标处所有可能值都会被取到。
延续前面的例子,a[2,,] 是一个4 £ 2 的数组。它的维度向量为c(4,2),数据向
量依次包括下面的值
c(a[2,1,1], a[2,2,1], a[2,3,1], a[2,4,1],
a[2,1,2], a[2,2,2], a[2,3,2], a[2,4,2])
a[,,]表示整个数组。这和忽略下标直接使用a 效果是一样的。
对于数组Z,用dim(Z) 可以对该数组维度向量进行显式的访问(可以放在赋值的任
何一边)。
还有,如果一个数组仅给出一个下标或索引向量,那么只有数据向量中对应的值
才会被访问;在这种情况下,维度向量会被忽略的。但是,如果单个索引不是一个向
量而是一个数组,可能就不是这样了,具体可以看下面的讨论。
索引数组
和用于下标位置的索引向量一样,可以根据索引数组去给数组中不规则的元素集
合赋值或者将数组中特定的元素返回到一个向量中。
用矩阵作为例子使这个过程变的更容易理解。在一个二维索引数组中,索引矩阵
μ可以假定含有两列及任意多行。索引矩阵中的元素就是数组的行列索引。假定我们
有一个4 ×5 的数组X,我们可以做如下的事情:
² 以向量的格式取出元素X[1,3], X[2,2] 和X[3,1],
² 在数组X 中用0替换这些元素。
在这个例子中,我们需要一个3 ×2 的下标数组,见下面的代码。
> x <- array(1:20, dim=c(4,5)) # 产生一个4 × 5 的数组。
> x
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 9 13 17
[2,] 2 6 10 14 18
[3,] 3 7 11 15 19
[4,] 4 8 12 16 20
> i <- array(c(1:3,3:1), dim=c(3,2))
> i # i 是一个3 × 2 的索引矩阵。
[,1] [,2]
[1,] 1 3
[2,] 2 2
[3,] 3 1
> x # 提取这些元素。
[1] 9 6 3
> x <- 0 # 用0替换这些元素。
> x
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 0 13 17
[2,] 2 0 10 14 18
[3,] 0 7 11 15 19
[4,] 4 8 12 16 20
>
下面是一个不太明显的例子,假定我们要从一个双因子blocks(b水平)和varieties
(v 水平)定义的区组化设计实验中得到一个设计矩阵。进一步假定实验进行了n次。我
们可以按下面的步骤进行:
> Xb <- matrix(0, n, b)
> Xv <- matrix(0, n, v)
> ib <- cbind(1:n, blocks)
> iv <- cbind(1:n, varieties)
> Xb[ib] <- 1
> Xv[iv] <- 1
> X <- cbind(Xb, Xv)
我们则可以用下面的办法创建关联矩阵N,
> N <- crossprod(Xb, Xv)
但是最简单最直接的办法是使用函数table():
> N <- table(blocks, varieties)
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-2 07:58 , Processed in 0.023027 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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