【问题标题】:Print a multiplication table with minimal code用最少的代码打印一个乘法表
【发布时间】:2012-05-31 20:26:10
【问题描述】:

在 R 中,打印乘法表的最快方法(最短代码)是什么? seq rep 和 bind 函数有帮助,但我正在寻找最短的代码行来执行此操作。

rbind("1\'s"=1:12, "2\'s"=seq(2,24,2), "3\'s"=seq(3,36,3), 
      "4\'s"=seq(4,48,4), "5\'s"=seq(5,60,5), "6\'s"=seq(6,72,6))

打印 1 到 6 的交叉(水平)。有谁知道如何以更紧凑的方式执行此操作?

【问题讨论】:

    标签: r seq rbind


    【解决方案1】:
    tbl <- outer(1:6, 1:12, "*")
    rownames(tbl) <- paste(1:6, "'s", sep="")
    tbl
    

    您可以使用paste0(1:6, "'s") 稍微更紧凑

    这似乎略有改善:

    > v<-setNames(1:6, paste0(1:6, "\'s"))
    > v %o% v
        1's 2's 3's 4's 5's 6's
    1's   1   2   3   4   5   6
    2's   2   4   6   8  10  12
    3's   3   6   9  12  15  18
    4's   4   8  12  16  20  24
    5's   5  10  15  20  25  30
    6's   6  12  18  24  30  36
    

    【讨论】:

    • 闪电般的速度(进入)。谢谢。
    • 再短几个字符:v &lt;- 1:6; (tbl &lt;- outer(setNames(v,paste0(v,"'s")),1:12))
    【解决方案2】:

    outer(1:6, 1:12, "*") 的快捷方式:

    > 1:6 %o% 1:12
         [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
    [1,]    1    2    3    4    5    6    7    8    9    10    11    12
    [2,]    2    4    6    8   10   12   14   16   18    20    22    24
    [3,]    3    6    9   12   15   18   21   24   27    30    33    36
    [4,]    4    8   12   16   20   24   28   32   36    40    44    48
    [5,]    5   10   15   20   25   30   35   40   45    50    55    60
    [6,]    6   12   18   24   30   36   42   48   54    60    66    72
    

    【讨论】:

      猜你喜欢
      • 2018-08-30
      • 1970-01-01
      • 1970-01-01
      • 2015-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多