首页 > 解决方案 > 访问(并填充)数组中的不同行

问题描述

假设我有一个 3 维数组:

a <- array(dim = c(3, 2, 3))

和一个带有第一维索引的向量:

ind <- c(1,2,3)

现在我想在第二维和第二维的行(ind)中输入一个数字(例如 1)。

a[ind,,] <- matrix(1, ncol = 2, nrow = length(ind))

显然行不通!循环可以工作,但是有更好的解决方案吗?

结果应该是:

, , 1

     [,1] [,2]
[1,]    1    1
[2,]   NA   NA
[3,]   NA   NA

, , 2

     [,1] [,2]
[1,]   NA   NA
[2,]    1    1
[3,]   NA   NA

, , 3

     [,1] [,2]
[1,]   NA   NA
[2,]   NA   NA
[3,]    1    1

标签: r

解决方案


使用mapply.

mapply(function(x, y) {a[x,,y] <<- 1;a}, ind, ind)
a
# , , 1
# 
# [,1] [,2]
# [1,]    1    1
# [2,]   NA   NA
# [3,]   NA   NA
# 
# , , 2
# 
# [,1] [,2]
# [1,]   NA   NA
# [2,]    1    1
# [3,]   NA   NA
# 
# , , 3
# 
# [,1] [,2]
# [1,]   NA   NA
# [2,]   NA   NA
# [3,]    1    1

或者,对于这种特定情况,其中xy相同,只需:

sapply(ind, function(x) {a[x,,x] <<- 1;a})

注意:如果您发现控制台输出不必要的 invisible()环绕代码。


推荐阅读