在R中生成以下矩阵的最短代码是什么?

时间:2019-11-30 13:08:23

标签: r matrix

我的第一篇文章-刚开始学习R,我正在尝试使用尽可能最短的代码生成以下矩阵,并且只能想到长/手动方式。任何帮助将不胜感激。

enter image description here

3 个答案:

答案 0 :(得分:6)

这对于代码高尔夫来说可能更好,但这是我的尝试:

n <- 5
m <- diag(n)
-((row(m) + col(m) -2) %% n)
#>      [,1] [,2] [,3] [,4] [,5]
#> [1,]    0   -1   -2   -3   -4
#> [2,]   -1   -2   -3   -4    0
#> [3,]   -2   -3   -4    0   -1
#> [4,]   -3   -4    0   -1   -2
#> [5,]   -4    0   -1   -2   -3

reprex package(v0.3.0)于2019-11-30创建

类似的路线:

n <- 5
v <- seq_len(n)
-((outer(v, v, '+') - 2) %% n)

答案 1 :(得分:1)

这是一个相当简短的版本,但可能不是最短的版本:

n <- 5
-matrix(matrix(1:n - 1, n+1, n)[-n-1,], n,n)

答案 2 :(得分:1)

我同意这更适合代码高尔夫,但我将尝试一下:

-matrix(floor(seq(0,29,1.2))%%5, 5)

输出:

     [,1] [,2] [,3] [,4] [,5]
[1,]    0   -1   -2   -3   -4
[2,]   -1   -2   -3   -4    0
[3,]   -2   -3   -4    0   -1
[4,]   -3   -4    0   -1   -2
[5,]   -4    0   -1   -2   -3