【问题标题】:How do I create an addition table in R?如何在 R 中创建加法表?
【发布时间】:2017-04-19 22:47:24
【问题描述】:

这应该很容易,但我想不出更优雅的方式来创建加法表,例如:

x <- 1:3
cbind(x + x[1], x + x[2], x + x[3])

     [,1] [,2] [,3]
[1,]    2    3    4
[2,]    3    4    5
[3,]    4    5    6

我尝试了各种版本的lapply() 无济于事。

【问题讨论】:

  • 您正在寻找外层。 outer(x, x, +)
  • @Sotos,可能是outer(1:3, 1:3, "+")
  • @d.b 不是和 Sotos 说的一样吗?
  • @d.b 这就是我写的。在评论中添加反引号很棘手
  • @Roman Luštrik,我的意思是 + 周围的引号

标签: r matrix vector


【解决方案1】:

您可以使用outersapplyexpand.grid(与rowSums 结合使用)

x = 1:3
outer(x, x, "+")
#     [,1] [,2] [,3]
#[1,]    2    3    4
#[2,]    3    4    5
#[3,]    4    5    6

sapply(seq_along(x), function(i) sapply(seq_along(x), function(j) x[i]+x[j]))
#     [,1] [,2] [,3]
#[1,]    2    3    4
#[2,]    3    4    5
#[3,]    4    5    6

matrix(rowSums(expand.grid(x, x)), ncol = length(x))
#     [,1] [,2] [,3]
#[1,]    2    3    4
#[2,]    3    4    5
#[3,]    4    5    6

【讨论】:

    【解决方案2】:

    你可以这样做:

    m <- diag(length(x))
    m[] <- x[col(m)] + x[row(m)]
    
    #     [,1] [,2] [,3]
    #[1,]    2    3    4
    #[2,]    3    4    5
    #[3,]    4    5    6
    

    matrix(x,length(x),length(x),byrow = TRUE) + x
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-07
      • 2016-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-07
      • 2012-11-25
      • 2015-07-12
      相关资源
      最近更新 更多