剪切矢量两部分并在索引为1时粘贴

时间:2018-08-08 06:40:42

标签: r loops vector

这是问题所在。 a是将以b中给定的值切4次的向量。将这两部分以相反的顺序切回。但是,使用b==1会产生一个问题,从显示的输出中可以看出。中心问题是c(3:4, 1:2)可以正常工作,但是c(1:4, 1:0)不能正常工作(一个1太多)。如何在不编写过多额外代码的情况下最好地解决此问题?

a <- c(1:4)
b <- c(3,4,2,1)
d <- NULL

for(i in 1:(length(b))){
  d <- c( d, a[ b[i]:length(a) ], a[ 1:(b[i]-1) ] )
  print(d)
}

[1] 3 4 1 2
[1] 3 4 1 2 4 1 2 3
 [1] 3 4 1 2 4 1 2 3 2 3 4 1
 [1] 3 4 1 2 4 1 2 3 2 3 4 1 1 2 3 4 1

2 个答案:

答案 0 :(得分:1)

您可以使用0而不是1来开始最后一个索引

a <- c(1:4)
b <- c(3,4,2,1)
d <- NULL

for(i in 1:(length(b))){
  d <- c( d, a[ b[i]:length(a) ], a[ 0:(b[i]-1) ] )
  print(d)
}

[1] 3 4 1 2
[1] 3 4 1 2 4 1 2 3
 [1] 3 4 1 2 4 1 2 3 2 3 4 1
 [1] 3 4 1 2 4 1 2 3 2 3 4 1 1 2 3 4

答案 1 :(得分:0)

问题在这里:

d <- c( d, a[ b[i]:length(a) ], a[ 1:(b[i]-1) ] )

您的循环功能是1:5。 b只有4个索引