我有一个问题,如何构建这种类型的矩阵,节省更多的时间.任务是用户输入自然数(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
Run Code Online (Sandbox Code Playgroud)
是的,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
Run Code Online (Sandbox Code Playgroud)
这是一个功能
myfun <- function(n) {
series <- c(seq_len(n-1), n, rev(seq_len(n-1)))
return(outer(series, series, pmin))
}
myfun(4)
Run Code Online (Sandbox Code Playgroud)