如何调用矩阵单元格中的两个值之一?outer构建矩阵的索引方法咨询
如何索引组合矩阵中的单个元素
没问题,你的需求完全可以实现,咱们分两种实用的方法来解决:
方法1:用outer生成多维数组(最直接)
当你用outer让两个元素返回一个组合向量时,R会自动把结果整理成三维数组,而不是每个单元格存向量的普通矩阵。这样你就可以通过三维索引直接访问单个元素:
首先定义你的向量:
x <- c(1, 3, 5, 7) y <- c(2, 4, 6, 8)
生成包含所有组合的三维数组:
comb_array <- outer(x, y, function(a, b) c(a, b))
你可以用dim(comb_array)查看维度,会得到[1] 4 4 2,代表4行、4列、每个位置有2个元素。
现在要取第1行第1列的第二个元素,直接用三维索引:
comb_array[1, 1, 2] # 输出:2
同理,取第3行第2列的第一个元素:
comb_array[3, 2, 1] # 输出:5
这种方法的优势是批量操作方便,比如要提取所有组合的第一个元素,直接写comb_array[,,1]就能得到一个4×4的矩阵,全是x的元素;提取第二个元素就用comb_array[,,2]。
方法2:构建列表矩阵(符合你想要的写法)
如果你希望每个单元格本身是一个独立的向量,并且能用类似[[行,列]][元素位置]的方式索引,可以构建列表矩阵:
comb_list <- outer(x, y, Vectorize(function(a, b) list(c(a, b))))
这里用Vectorize把返回列表的函数向量化,确保outer能逐元素生成列表项。
现在你就可以用你预想的写法访问元素了:
comb_list[[1, 1]][2] # 输出:2
如果想取出整个组合向量,用comb_list[[1,1]]会得到c(1,2);用comb_list[1,1]则会返回一个包含该向量的列表元素。
这种方法更灵活,每个单元格可以存放任意长度的向量,但批量操作时可能需要配合lapply这类函数处理。
内容的提问来源于stack exchange,提问作者user8003788
相关产品推荐
相关产品推荐

