参考资料:学习R
1、创建数组和矩阵
可以使用array函数创建一个数组,为它们传入两个向量(值和维度)作为参数。另外,我们可以为每个维度命名:
three_d_array<-array(
1:24,
dim=c(4,3,2),
dimnames=list(
c("one","two","three","four"),
c("ein","zwei","drei"),
c("un","deux")
)
)
print(three_d_array)

创建矩阵的语法非常类似,但无法传递维度dim参数,只要指定行数或列数即可:
a_matrix<-matrix(
1:12,
nrow=4, #ncol=3也是同样的效果
dimnames=list(
c("one","two","three",'four'),
c('ein',"zwei","drei")
)
)
print(a_matrix)
class(a_matrix)

当然矩阵也可以用array函数来创建:
two_d_array<-array(
1:12,
dim=c(4,3),
dimnames=list(
c("one","two","three","four"),
c("ein","zwei","drei")
)
)
print(two_d_array)
class(two_d_array)
identical(two_d_array,a_matrix)

创建矩阵时,默认是按列填充的。我们也可以制定参数byrow=TRUE来按行填充矩阵。

2、行、列和维度
对于矩阵和数组,dim函数将返回其维度的整数值向量。

对于矩阵,函数nrow和ncol将返回行数和列数。

nrow和ncol也能用于数组,将分别返回第一个和第二个维度。但对于更高维度的对象,最好用dim函数。

length函数也能用于矩阵和数组。在这种情况下,它将返回所有维度的乘积:

我们还可以通过给dim函数分配一个新的维度来重塑矩阵或数组,但会删除原有维度的名称。

把nrow、ncol和dim用于向量时将返回NULL值。与nrow和ncol相对的函数是NROW和NCOL,它们把向量看作具有单个列的矩阵。
identical(nrow(a_matrix),NROW(a_matrix))
identical(ncol(a_matrix),NCOL(a_matrix))
recaman<-c(0,1,3,6,2,7,13,20)
nrow(recaman)
NROW(recaman)
ncol(recaman)
NCOL(recaman)
dim(recaman)

4、索引数组
索引数组与索引向量类似,只是现在要做索引的维度多于1个。我们用方括号[]来表示索引,且有四种方法(正整数、负整数、逻辑值和元素的名称)。在不同维度上用不同的方式指定索引下标完全没有问题。每个维度的下标用逗号分隔。
a_matrix<-matrix(
1:12,
nrow=4, #ncol=3也是同样的效果
dimnames=list(
c("one","two","three",'four'),
c('ein',"zwei","drei")
)
)
a_matrix[1,c("zwei","drei")]
# 要包括所有维度,只需要置空相应的下标即可
a_matrix[1,]
a_matrix[,c('zwei','drei')]

5、合并矩阵
c函数能在拼接矩阵之前把它们转换为向量:
another_matrix<-matrix(
seq.int(2,24,2),
nrow=4,
dimnames=list(
c("five","six","seven","eight"),
c("vier","funf","sechs")
)
)
print(another_matrix)
c(a_matrix,another_matrix)

通过使用cbind和rbind函数按行和列来绑定两个矩阵,能更自然地合并它们:

6、数组算术
和向量中的运算一样,标准算术运算符(+、-、*、/)将以相同的方式按元素来处理矩阵和数组。

当对两个数组执行算术运算时,必须确保它们的大小一致。例如:两个数组在相加时大小必须相等,而矩阵相乘时第一个矩阵的行数必须和第二矩阵的列数相等。
t函数用于转置矩阵(但不能转置更高维度的数组):

对于矩阵内乘和外乘运算,我们有特殊运算符%*%和%o%。每一次,如果维度的名称存在的话,都取自第一个输入:
# 内乘
a_matrix %*% t(a_matrix)
# 外乘
1:3 %o% 4:6
# 函数outer外乘
outer(1:3,4:6)

648

被折叠的 条评论
为什么被折叠?



