我有一个问题,如何构建这种类型的矩阵,节省更多时间。任务是用户输入自然数(n = 1,2,3,4,5 ......)并且R必须打印这种类型的矩阵(在n = 4的矩阵类型下面)。我观察到第一列和第二列与第6列和第7列对称,并且足以正确打印左侧的第一列和第二列。我还观察到第3列是第二列+ c(0,0,1,1,1,0,0),对应1 + 1 + 1 = 3 - 该列的数量。但是我不明白,对于一般情况,这个矩阵的算法是什么(对于n = 6的fe,dim是2n-1 x 2n-1(nrow x ncol)。它是构造的最容易的变体吗?这个矩阵列或函数外部允许简化该任务吗?
1 1 1 1 1 1 1
1 2 2 2 2 2 1
1 2 3 3 3 2 1
1 2 3 4 3 2 1
1 2 3 3 3 2 1
1 2 2 2 2 2 1
1 1 1 1 1 1 1
答案 0 :(得分:5)
是的,outer
可以让这更容易。结合pmin
,它可以为您提供您正在寻找的行为
n <- 4
series <- c(seq_len(n-1), n, rev(seq_len(n-1)))
# [1] 1 2 3 4 3 2 1
outer(series, series, pmin)
# [,1] [,2] [,3] [,4] [,5] [,6] [,7]
# [1,] 1 1 1 1 1 1 1
# [2,] 1 2 2 2 2 2 1
# [3,] 1 2 3 3 3 2 1
# [4,] 1 2 3 4 3 2 1
# [5,] 1 2 3 3 3 2 1
# [6,] 1 2 2 2 2 2 1
# [7,] 1 1 1 1 1 1 1
这是一个功能
myfun <- function(n) {
series <- c(seq_len(n-1), n, rev(seq_len(n-1)))
return(outer(series, series, pmin))
}
myfun(4)