r软件及统计分析s向量多维数组和矩阵(编辑修改稿)内容摘要:

33 ages[1]=2 ages[1] 输出: Li 2 向量还可用元素名字来访问元素或元素子集, 例如: ages[c(Li, Liu)] 输出: Li Liu 33 18 向量元素名可以后加,例: ages1 = c(33, 29, 18) names(ages1) = c(Li, Zhang, Liu) ages1 Li Zhang Liu 33 29 18 • 四、取字符型值的下标向量 S中还可以改变一部分元素的值,例如: x [1] x[c(1,3)] = c(144, 169) x [1] 144 125 169 注意赋值的长度必须相同,例外是可以把部分元素赋为一个统一值: x[c(1,3)] =0 x [1] 0 125 0 • 四、取字符型值的下标向量 要把向量所有元素赋为一个相同的值而又不想改变其长度,可以用 x[]的写法: x[] = 0 注意这与“ x = 0”是不同的,前者赋值后向量长度不变,后者使向量变为标量 0。 改变部分元素值的技术与逻辑值下标方法结合可以定义向量的分段函数, 例如:要定义 y=f(x)为当 x0时取 1x,否则取 1+x, 可以用: y = numeric(length(x)) y[x0] =1 x[x0] y[x=0] = 1 + x[x0] • 要定义 y=f(x)为当 x x, =x4时取x+10,否则取 x+20。 • x=c(,1,1,2,3,4,1,2,3,4)。 求 y. • x=c(,1,1,2,3,4,1,2,3,4)。 • y=numeric(length(x))。 • y[x3]=x[x3]。 • y[(x=3)amp。 (x)]=x[(x=3)amp。 (x)]+10。 • y[x]=x[x]+20。 • x。 • y。 多维数组和矩阵 数组( array)和矩阵 (matrix) • 数组( array)带多个下标的类型相同的元素的集合,常用的是数值型的数组如矩阵,也可以有其它类型(如字符型、逻辑型、复型数组)。 • 数组有一个特征属性叫做维数向量( dim属性),比如维数向量有两个元素时数组为二维数组(矩阵)。 维数向量的每一个元素指定了该下标的上界,下标的下界总为 1。 • 一组值只有定义了维数向量( dim属性)后才能被看作是数组。 比如: a=1:24 a dim(a)=c(2,4,3) a 数组( array)和矩阵 (matrix) • 数组元素的排列次序缺省情况下是采用FORTRAN的数组元素次序(按列次序),即第一下标变化最快,最后下标变化最慢,对于矩阵(二维数组)则是按列存放。 例如,假设数组 a的元素为 1:24,维数向量为 c(2,3,4),则各元素次序为 a[1,1,1], a[2,1,1], a[1,2,1], a[2,2,1], a[1,3,1], ..., a[2,3,4]。 • 用函数 array()或 matrix()可以更直观地定义数组。 array()函数的完全使用为 array(x, dim=length(x), dimnames=NULL),其中 x是第一自变量,应该是一个向量,表示数组的元素值组成的向量。 dim参数可省,省略时作为一维数组(但不同于向量)。 dimnames属性可以省略,不省略时是一个长度与维数相同的列表( list,见后面),列表的每个成员为一维的名字。 • 函数 matrix():二维数组,即矩阵。 • 格式为 matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL) 其中第一自变量 data为数组的数据向量(缺省值为缺失值 NA), nrow为行数, ncol为列数,byrow表示数据填入矩阵时按行次序还是列次序,缺省情况下按列次序。 dimnames缺省是空值,否则是一个长度为 2的列表,列表第一个成员是长度与行数相等的字符型向量,表示每行的标签,列表第二个成员是长度与列数相同的字符型向量,表示每列的标签。 例如,定义一个 3行 4列,由 1:12按行次序排列的矩阵,可以用: • b matrix(1:12, ncol=4, byrow=T) • b matrix(1:12, ncol=4, byrow=T) b [,1] [,2] [,3] [,4] [1,] 1 2 3 4 [2,] 5 6 7 8 [3,] 9 10 11 12 注意在有数据的情况下只需指定行数或列数之一。 指定的数据个数允许少于所需的数据个数,这时循环使用提供的数据。 例如: • b matrix(0, nrow=3, ncol=4) 生成 3行 4列的元素都为 0的矩阵。 数组下标 • 访问数组的某个元素,写出数组名和方括号内用逗号分开的下标即可,如 a[2,1,2]。 • 在每一个下标位置写一个下标向量,表示对这一维取出所有指定下标的元素,如 a[1, 2:3, 2:3]取出所有第一下标为 1,第二下标为 2或 3,第三下标为 2或 3的元素。 • 略写某一维的下标,则表示该维全选。 • a[ , , ]或 a[]都表示整个数组。 • a[] =0 把元素都赋成 0。 • 还有一种特殊下标是对于数组只用一个下标向量(是向量,不是数组),比如 a[3:4] ,这时忽略数组的维数信息,把下标表达式看作是对数组的数据向量取子集。 不规则数组下标 • 可以把数组中的任意位置的元素作为一组访问, • 其方法是用一个矩阵作为数组的下标, • 例如,我们要把上面的形状为 c(2,3,4)的数组 a的第 [1,1,1], [2,2,3], [1,3,4], [2,1,4]号共四个元素作为一个整体访问,先定义一个包含这些下标作为行的二维数组 : b = matrix(c(1,1,1, 2,2,3, 1,3,4, 2,1,4), ncol=3, byrow=T) b a[b] • x1 c(100, 200) • x2 1:6 • x1+x2 • x3 matrix(1:6, nrow=3) • x3 • x1+x3 数组四则运算 • 数组可以进行四则运算( +,- , *, /, ^),解释为数组对应元素的四则运算,参加运算的数组一般应该是相同形状的( dim属性完全相同)。 例如,假设 A, B, C是三个形状相同的数组,则 • D C + 2*A/B • 四则运算遵循通常的优先级规则。 • 形状不一致的向量和数组也可以进行四则运算,一般的规则是数组的数据向量对应元素进行运算,把短的循环使用来与长的匹配,并尽可能保留共同的数组属性。 例如: 不规则运算 • 除非你清楚地知道规则,否则应避免使用这样的办法(标量与数组或向量的四则运算除外)。 矩阵运算 • 矩阵是二维数组,应用广泛 • 函数 t(A)返回矩阵 A的转置。 nrow(A)为矩阵 A的行数, ncol(A)为矩阵 A的列数。 • 矩阵之间进行普通的加减乘除四则运算,即数组的对应元素之间进行运算,所以注意 A*B不是矩阵乘法而是矩阵对应元素相乘。 • 要进行矩阵乘法,使用运算符 %*%, A%*%B表示矩阵 A乘以矩阵 B(当然要求 A的列数等于 B的行数)。 例如: • A matrix(1:12, nrow=4, ncol=3, byrow=T) • B matrix(c(1,0), nrow=3, ncol=2, byrow=T) • A • 另外,向量用在矩阵乘法中可以作为行向量看待也可以作为列向量看待,这要看哪一种观点能够进行矩阵乘法运算。 • 例如,设 x是一个长度为 n的向量, A是一个 n*n 矩阵,则“ x %*% A %*% x”表示二次型。 • 但是,有时向量在矩阵乘法中的地位并不清楚,比如“ x %*% x”就既可能表示内积 , 也可能表示 n*n 阵。 因为前者较常用,所以 S选择表示前者,但内积。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。