重复R中的序列

时间:2015-11-20 14:05:39

标签: r loops sequence

我想要生成数字(1:5)(1:5)+45的矢量等等

    nums <- seq(1,22500,45) 
    rws <- c(1:5)
    nums2 <- nums - 1
    for (i in nums2[2:500]){
    rwsx <- append(rws, rws+i)
    rwsx}

但是循环只存储了最新的追加,我得到了:

1     2     3     4     5 22456 22457 22458 22459 22460

4 个答案:

答案 0 :(得分:5)

听起来你正在寻找outer。尝试:

> nums <- seq(1, 22500, 45)
> out <- outer(nums, 0:4, "+")
> head(out)
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5
[2,]   46   47   48   49   50
[3,]   91   92   93   94   95
[4,]  136  137  138  139  140
[5,]  181  182  183  184  185
[6,]  226  227  228  229  230
> tail(out)
        [,1]  [,2]  [,3]  [,4]  [,5]
[495,] 22231 22232 22233 22234 22235
[496,] 22276 22277 22278 22279 22280
[497,] 22321 22322 22323 22324 22325
[498,] 22366 22367 22368 22369 22370
[499,] 22411 22412 22413 22414 22415
[500,] 22456 22457 22458 22459 22460

如评论中所述,matrix是具有维度属性的向量。 R中的矩阵通常由列构造,因此如果要删除维度并按行顺序获取单个向量,则需要t首先对矩阵进行转换。

> head(as.vector(t(out)), 16)
 [1]   1   2   3   4   5  46  47  48  49  50  91  92  93  94  95 136

答案 1 :(得分:2)

我们可以尝试

rwsx <- matrix(nums,500) %*% matrix(rws,1)

head(rwsx)

      [,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5
[2,]   46   92  138  184  230
[3,]   91  182  273  364  455
[4,]  136  272  408  544  680
[5,]  181  362  543  724  905
[6,]  226  452  678  904 1130

答案 2 :(得分:1)

r <- 22500%/%45
m <- matrix(45*0:(r-1), r, 5)
m <- m+ col(m)
rwsx <- c(t(m))

r <- 22500%/%45
m <- matrix(45*0:(r-1), 5, r, byrow=TRUE)
m <- m+ row(m)
rwsx <- c(m)

答案 3 :(得分:1)

作为oneliner:

as.vector(sapply(seq(by = 45, length.out = 10), function(x) x + 0:4))