在R中复制向量元素时的奇怪行为

时间:2015-02-09 18:27:09

标签: r

我有以下代码。

interleave <- function(v1, v2)
{
    ord1 <- 2*(1:length(v1))-1
    ord2 <- 2*(1:length(v2))
    c(v1,v2)[order(c(ord1,ord2))]
}
widths = c(83, 17, 85, 15, 77, 23, 75, 25, 71, 29, 68, 32, 64, 36, 60, 
           40, 57, 43, 54, 46, 42, 58)
rep(interleave(1:11,22:12)[i],times=widths[i])

mat.contents=unlist(sapply(1:22,function(i) rep(interleave(1:11,22:12)[i],times=widths[i])))

> table(mat.contents)
1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 
83 85 77 75 71 68 64 60 56 54 42 57 46 43 40 36 32 28 25 23 15 17 

5复制71次但18这是5对和18对中的另一位数只复制了28次而71 + 28 = / = 100,这应该是因为你可以在widths中看到,71和29彼此相邻。

可以纠正这种行为吗?

为清楚起见,未列出的矢量格式的对应为:

> 1 22  2 21  3 20  4 19  5 18  6 17  7 16  8 15  9 14 10 13 11 12

相应的宽度:

> 83 17 85 15 77 23 75 25 71 29 68 32 64 36 60 40 57 43 54 46 42 58

1 个答案:

答案 0 :(得分:0)

尝试

v1 <- interleave(1:11, 22:12)
table(rep(factor(v1, levels=unique(v1)), widths))
# 1 22  2 21  3 20  4 19  5 18  6 17  7 16  8 15  9 14 10 13 11 12 
#83 17 85 15 77 23 75 25 71 29 68 32 64 36 60 40 57 43 54 46 42 58